在C# 用dllimport 调用VC ++ winapi 型的dll example

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)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youcharming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值