函数名 int CVR_Scan (int ScanType,int ScanMode, int iDirect,IDCARD_ALL *PIDCARD);出口参数 PIDCARD IDCARD_ALL 扫描结果 见结构定义例子:CVR_Scan (0,1, 0, PIDCARD);
[System.Runtime.InteropServices.DllImport("CVR100Z562SDK.dll", EntryPoint = "CVR_Scan", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = false)]
        public static extern int CVR_Scan(int ScanType, int ScanMode, int iDirect, "");typedef struct
{
char name [40]; //姓名
char SurnameCH[100]; //中文姓
char nameCH[100]; //中文名
char sex[10]; //性别
char Gender[10]; //性别(英文)
char birthday[50]; //出生日期
char people[20]; //民族
char signdate[50]; //发证日期
char validterm[50]; //有效期限
char address[200]; //地址
char number[40]; //身份证号码
char organs[50]; //发证机关
char SurnameEN[100]; //英文姓(汉语拼音)
char nameEN[100]; //英文名(汉语拼音)
char ENfullname[40]; //英文姓名
char Nationality[200]; //国籍
char id[100]; //证件号码
char Leavetime[50]; //离开时间
char placeCH[100]; //签发地点中文
char placeEN[100]; //签发地点英文
char BirthplaceCH[100]; //出生地中文 
char BirthplaceEN[100]; //出生地英文
char szCodeOne[256]; //第一行代码识别结果
char szCodeTwo[256]; //第二行代码识别结果
char szCodeThree[256]; //第三行代码识别结果
char Permitnumber_number[40]; //港澳证件号码
char Vocational[200]; //职业
char DocumentsCategory[100]; //证件类别
char Other[200];
}IDCARD_ALL;
这是一个调用C++的开发文档 由于刚搞窗体程序 不懂怎么掉用 也没给个开发案例 求解上面红色的引号里我要怎么弄 才能直接
  返回的时候我可以这样调用 CVR_Scan (0,1, 0, PIDCARD);

解决方案 »

  1.   


    int CVR_Scan (int ScanType,int ScanMode, int iDirect,ref IDCARD_ALL PIDCARD);
    另外你的结构很简单,虽然看起来大,统统用byte数组代替,并为每一个结构变量设置大小在传递public struct IDCARD_ALL
            {
                public byte[] name; //姓名
                public byte[] SurnameCH; //中文姓
                public byte[] nameCH; //中文名
                .....
                .....
                .....
            }先分配大小,在传递
      

  2.   

    public static extern int CVR_Scan(int ScanType, int ScanMode, int iDirect,StringBuilder str);
    试试
      

  3.   


     我怎么调用呢  CVR_Scan (0,1, 0, PIDCARD); 这个写提示有错误的   PIDCARD 调用的时候还要定义什么不? 
      

  4.   


    调用的时候,你先new一个IDCARD_ALL结构对象
    然后是对该结构中所有变量的初始化。。IDCARD_ALL ia = new IDCARD_ALL();
    ia Init调用:CVR_Scan (1,2,3,ref ia);
      

  5.   

    C#调用c++Dll结构体数组指针的问题 学习
      

  6.   


       例子:CVR_Scan (0,1, 0, PIDCARD);   例子里好像没有ref 这个
      

  7.   

    完整解决:
    1、先把C++的结构体在C#中进行映射:[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct IDCARD_ALL 

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
    public String name;//姓名
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String SurnameCH;//中文姓
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String nameCH;//中文名
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
    public String sex;//性别
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
    public String Gender;//性别(英文)
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
    public String birthday;//出生日期
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
    public String people;//民族
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
    public String signdate;//发证日期
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
    public String validterm;//有效期限
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
    public String address;//地址
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
    public String number;//身份证号码
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
    public String organs;//发证机关
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String SurnameEN;//英文姓(汉语拼音)
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String nameEN;//英文名(汉语拼音)
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
    public String ENfullname;//英文姓名
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
    public String Nationality;//国籍
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String id;//证件号码
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
    public String Leavetime;//离开时间
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String placeCH;//签发地点中文
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String placeEN;//签发地点英文
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String BirthplaceCH;//出生地中文
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String BirthplaceEN;//出生地英文
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
    public String szCodeOne;//第一行代码识别结果
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
    public String szCodeTwo;//第二行代码识别结果
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
    public String szCodeThree;//第三行代码识别结果
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
    public String Permitnumber_number;//港澳证件号码
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
    public String Vocational;//职业
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
    public String DocumentsCategory;//证件类别
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
    public String Other;
      

  8.   

    2、正确声明函数:[DllImport("CVR100Z562SDK.dll", EntryPoint = "CVR_Scan", CharSet = CharSet.Ansi,CallingConvention =CallingConvention.Cdecl)]
      public static extern int CVR_Scan(int ScanType, int ScanMode, int iDirect, ref IDCARD_ALL pIDCARD);剩下的就是你在C#中的调用了。