注册 登录
编程论坛 C# 论坛

C++ 定义的 typedef struct {...}IDCARD_ALL; 结构 和方法 extern "C" int __stdcal

wjshan0808 发布于 2014-08-06 16:37, 596 次点击
这个是C++的一个结构
程序代码:
typedef struct
{
char name[40];   //姓名
char sex[10];     //性别
char people[20];  //民族,护照识别时此项为空
char birthday[50]; //出生日期
char address[200]; //地址,在识别护照时导出的是国籍简码、
char signdate[50]; //签发日期,在识别护照时导出的是有效期至
char validterm[50];  //有效期,在识别护照时为空,
char number[40];   //证件编码,在识别护照时为护照号 ;识别港澳通行证内页时为港澳证件号码
char other[100];    //备用,在识别护照时导出护照类型,识别港澳通行证封页时证件号;
char szCodeOne[256];//护照、台胞证、港澳通行证封页第一行机读码,
char szCodeTwo[256];//护照、台胞证、港澳通行证封页第二行机读码,
}IDCARD_ALL;
然后一个方法
extern "C" int __stdcall RecogIdcardOnlyALL( LPCTSTR imgfile_name, IDCARD_ALL & card, bool bSaveResultFile, int nHandPrint, int nContent, char* HeadImgFName );

我用 C# 这样转换
 
程序代码:
   /// <summary>
   
/// 扫描时设置参数的结构体
   
/// </summary>
    [StructLayout(LayoutKind.Sequential, Size = 256)]
    public struct IDCARD_ALL
    {
        /// <summary>
        
/// 姓名
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
        public string name;
        /// <summary>
        
/// 性别
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
        public string sex;
        /// <summary>
        
/// 民族 护照识别时此项为空
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
        public string people;
        /// <summary>
        
/// 出生日期
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
        public string birthday;
        /// <summary>
        
/// 地址 在识别护照时导出的是国籍简码
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
        public string address;
        /// <summary>
        
/// 签发日期 在识别护照是空
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
        public string signdate;
        /// <summary>
        
/// 有效期
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
        public string validterm;
        /// <summary>
        
/// 证件编码 在识别护照时为护照号 识别港澳通行证内页时为港澳证件号码
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
        public string number;
        /// <summary>
        
/// 备用 在识别护照时导出护照类型,识别港澳通行证封页时证件号
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
        public string other;
        /// <summary>
        
/// 护照 台胞证,第一行机读码,
        
/// 一代身份证时,复印件标记
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
        public string szCodeOne;
        /// <summary>
        
/// 护照 台胞证,第二行机读码
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
        public string szCodeTwo;
    }

然后 调用

 
               IDCARD_ALL idCardAll = new IDCARD_ALL();
               
                RecogNewIdcardOnlyALL(@"C:\scan9.BMP", ref idCardAll, true, 256, "scan9.BMP");

但是结果很悲剧 idCardAll 里面没数据。
这是为什么
0 回复
1