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

tteagle 2015-06-05 06:42:36
、官方的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)
...全文
556 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tteagle 2015-06-06
  • 打赏
  • 举报
回复
我自己搞定了,跟这些关系都不大,编译时指定X86就行了。 最后用byte[],不过char[]也可以用的。 谢谢楼上几位兄弟的帮助。
tcmakebest 2015-06-05
  • 打赏
  • 举报
回复
所有 char[] 都改为 byte[],用 Encoding.Default.GetString 和 GetBytes 与字符串转换。
如若初见 2015-06-05
  • 打赏
  • 举报
回复
数据类型问题 private static extern int IDC_ReadCard(int ComPort, int TimeOut, ref StringBuilder IDInfo, int IDInfo_Size, ref StringBuilder PhotoPath);
tteagle 2015-06-05
  • 打赏
  • 举报
回复
引用 3 楼 poilkjasd 的回复:
[quote=引用 2 楼 tteagle 的回复:] [quote=引用 1 楼 poilkjasd 的回复:] 目测你写的数据类型有问题 private static extern int IDC_ReadCard(int ComPort, int TimeOut, ref char[] IDInfo, int IDInfo_Size, ref char[] PhotoPath);
你写的跟我写的一模一样啊。[/quote] 我是说这句有问题 我写的是下面 private static extern int IDC_ReadCard(int ComPort, int TimeOut, string IDInfo, int IDInfo_Size, string PhotoPath);[/quote] 不行啊。
poilkjasd 2015-06-05
  • 打赏
  • 举报
回复
引用 2 楼 tteagle 的回复:
[quote=引用 1 楼 poilkjasd 的回复:] 目测你写的数据类型有问题 private static extern int IDC_ReadCard(int ComPort, int TimeOut, ref char[] IDInfo, int IDInfo_Size, ref char[] PhotoPath);
你写的跟我写的一模一样啊。[/quote] 我是说这句有问题 我写的是下面 private static extern int IDC_ReadCard(int ComPort, int TimeOut, string IDInfo, int IDInfo_Size, string PhotoPath);
tteagle 2015-06-05
  • 打赏
  • 举报
回复
引用 1 楼 poilkjasd 的回复:
目测你写的数据类型有问题 private static extern int IDC_ReadCard(int ComPort, int TimeOut, ref char[] IDInfo, int IDInfo_Size, ref char[] PhotoPath);
你写的跟我写的一模一样啊。
poilkjasd 2015-06-05
  • 打赏
  • 举报
回复
目测你写的数据类型有问题 private static extern int IDC_ReadCard(int ComPort, int TimeOut, ref char[] IDInfo, int IDInfo_Size, ref char[] PhotoPath);

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧