当前位置: 代码迷 >> C# >> 请问一个C#读二代身份证阅读器dll 的有关问题,大侠们进来看看,多谢
  详细解决方案

请问一个C#读二代身份证阅读器dll 的有关问题,大侠们进来看看,多谢

热度:96   发布时间:2016-05-05 03:31:46.0
请教一个C#读二代身份证阅读器dll 的问题,大侠们进来看看,谢谢。
、官方的API说明
可循环等待读身份证函数
int IDC_ReadCard(int ComPort,int TimeOut,char *IDInfo,int IDInfo_Size,char *PhotoPath) 
输入参数: 输入参数 名称 长度(字节) 说明 
ComPort 端口号 串口:1-16 USB: 1001 
TimeOut 超时值 读身份证等待时间(单位 秒) 
IDInfo_Size IDInfo 预分配内存大小 5120 
IDInfo 预分配内存大小 (5120)
PhotoPath 芯片头像路径+文件名 称
256 包括头像路径和文件名, 如 1: c:\\zp.bmp 如 2: c:\\zp.jpg
输出参数:
输出参数 名称 长度(字节) 说明 IDInfo 身份证信息 5120 姓名|性别|民族|出生|住 址|号码|签发机关|起始有 效期|终止有效期|预留信 息|芯片图片 jpg 信息 (Base64 码)
返回值:
值 说明 0 成功 非 0 失败(见错误代码表)

 二、官方的的C++代码示例:官方没有.Net示例....
typedef int (_stdcall * FunIDC_ReadCard) (int ComNo,int TimeOut,char *buf,int buf_size,char*PhotoPath); 
Fun IDC_ReadCardIDC_ReadCard;
HMODULE hMod; 
CStringDllPath="sdtapi.dll"; 
hMod =LoadLibrary(DllPath); 

IDC_ReadCard=(FunIDC_ReadCard)GetProcAddress(hMod,_T("IDC_ReadCard"));
int rc,ComNo=1001,TimeOut=10; 
char buf[5120],PhotoPath[256]; 
memset(buf,0,sizeof(buf)); 
strcpy(PhotoPath,”c://zp.bmp”); 
rc=IDC_ReadCard(ComNo,TimeOut,buf,5120,PhotoPath) ;
FreeLibrary(hMod); 


三、问题来了:
怎么用C#调用这个sdtapi.dll啊?
我自己写了一个,完全不行,跑不起来,问题出在哪里呢?
 [DllImport("sdtapi.dll")]
        private static extern int IDC_ReadCard(int ComPort, int TimeOut, ref char[] IDInfo, int IDInfo_Size, ref char[] PhotoPath);

        private void button2_Click(object sender, EventArgs e)
        {
            char[] info = new char[5120];
            string jpgpath="D:\\aa.jpg";
            char[] path = new char[256];
            path = jpgpath.ToCharArray();
            IDC_ReadCard(1001, 5, ref info, 5120,ref path);
        }
错误提示:
“System.BadImageFormatException”类型的未经处理的异常在 Test.exe 中发生 
其他信息: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
------解决思路----------------------
目测你写的数据类型有问题
private static extern int IDC_ReadCard(int ComPort, int TimeOut, ref char[] IDInfo, int IDInfo_Size, ref char[] PhotoPath);
------解决思路----------------------
数据类型问题
private static extern int IDC_ReadCard(int ComPort, int TimeOut, ref StringBuilder IDInfo, int IDInfo_Size, ref StringBuilder PhotoPath);
------解决思路----------------------
所有 char[] 都改为 byte[],用 Encoding.Default.GetString 和 GetBytes 与字符串转换。
  相关解决方案