V C++dll 用的数据结构是结构体,结构如下:
typedef struct
{
char name[40];
char sex[10];
char people[20];
char birthday[50];
char address[200];
char signdate[50];
char validterm[10];
char number[40];
char other[100];
}IDCARD_ALL;
在C#中是这样定义结构:
[StructLayout(LayoutKind.Sequential)]
public struct IDCARD_ALL
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public string name;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string sex;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string nation;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string birthday;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
public string address;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string signdate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string validterm;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public string number;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string other;
}
dll 是如下方式导入到C#中:
//接口函数
[DllImport(".//idcarddll.dll")]
public static extern int LoadIdcardLibrary();
[DllImport(".//idcardll.dll")]
public static extern void FreeIdcardLibrary();
[DllImport("idcarddll.dll")]
public static extern int RecogIdcardExALL(string imgfile_name, ref IDCARD_ALL card, bool bSaveResultFile, int nHandPrint, int nContent, string HeadImgFName, short nButtonType);
[DllImport("idcarddll.dll")]
public static extern int RecogDPALL(string imgfile_name, ref IDCARD_ALL card,bool bSaveResultFile, int nContent,string HeadImgFName);
[DllImport("idcarddll.dll")]
public static extern int RecogNewIdcardALL (string imgfile_name, ref IDCARD_ALL card, bool bSaveResultFile, int nContent, string HeadImgFName);
[DllImport("idcarddll.dll")]
public static extern int RecogPassPortALL(string imgfile_name, ref IDCARD_ALL card, bool bSaveResultFile, int nContent, string HeadImgFName);
[DllImport("idcarddll.dll")]
public static extern int ScanImageEx(string imgfile_name, short nButtonType);
其中RecogIdcardExALL VC++中函数的原型为:int WINAPI RecogIdcardExALL(LPTSTR imgfile_name,IDCARD_ALL & card,bool bSaveResultFile, int nHandPrint,int nContent,char* HeadImgFName,short nButtonType)