
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 );
{
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;
}
/// 扫描时设置参数的结构体
/// </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");
RecogNewIdcardOnlyALL(@"C:\scan9.BMP", ref idCardAll, true, 256, "scan9.BMP");
但是结果很悲剧 idCardAll 里面没数据。
这是为什么