急,用过二代身份证证阅读器接口的,请进!

onhu 2007-09-24 09:05:55
阅读器的实例是C写的,我转成Delphi后,调用SDT_ReadBaseMsg时就会出错,哪位如做过的,请指点一下
C里面的声明
int SDT_ReadBaseMsg ( int iPort,
unsigned char * pucCHMsg,
unsigned int * puiCHMsgLen,
unsigned char * pucPHMsg,
unsigned int * puiPHMsgLen,
int iIfOpen );
我Delphi里是这么写的
function SDT_ReadBaseMsg(iPort:smallint;
pucCHMsg:array of char;
puiCHMsgLen:array of smallint;
pucPHMsg:array of char;
puiPHMsgLen:array of smallint;
iIfOpen:smallint):smallint;stdcall;external 'sdtapi.dll';
...全文
686 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sbamdanb12 2011-06-24
  • 打赏
  • 举报
回复
我有一个身份证真假验证的接口数据来源是公安部,可以根据名字和证号得到头像有用到可找我QQ85743282
onhu 2007-10-07
  • 打赏
  • 举报
回复
问题还没解决……upup
voyan 2007-09-30
  • 打赏
  • 举报
回复
onhu
天河
等 级:
发表于:2007-09-24 12:11:149楼 得分:0
一样的,也是乱码
应该是函数产生出来右问题
............................
我想多半是转码问题
onhu 2007-09-30
  • 打赏
  • 举报
回复
up
zhangl 2007-09-24
  • 打赏
  • 举报
回复
你用的哪个声明?


function SDT_ReadBaseMsg(iPort:Integer;
pucCHMsg:PChar;
var puiCHMsgLen:Integer; //此处定义成变参更方便一些
pucPHMsg:PChar;
var puiPHMsgLen:Integer;
iIfOpen:Integer):Integer;stdcall;external 'sdtapi.dll ';


调用
//...
var
pucCHMsg, pucPHMsg: PChar;
iPort, puiCHMsgLen, puiPHMsgLen: Integer;
begin
//..
GetMem(pucCHMsg, 1024);
GetMem(pucPHMsg, 1024);

SDT_ReadBaseMsg(iPort, pucCHMsg, puiChMsgLen, pucPHMsg, puiPHMsgLen, 1 );
//..
end;

puiChMsgLen, puiPHMsgLen 声明为整形, 无需申请空间, 再试一下吧
onhu 2007-09-24
  • 打赏
  • 举报
回复
一样的,也是乱码
应该是函数产生出来右问题
zhangl 2007-09-24
  • 打赏
  • 举报
回复
不用SetString

直接ShowMessage(pucCHMsg)试试
onhu 2007-09-24
  • 打赏
  • 举报
回复
我把iIfOpen设成1就读取成功了,但出来是乱码
我是这么转的
var mystr:string;
SetString(mystr,pucCHMsg,Length(pucCHMsg));
出来的mystr是乱码
是我转的有问题,还是函数调用右问题?
onhu 2007-09-24
  • 打赏
  • 举报
回复
我现在调用前加了
GetMem(pucCHMsg,1024);
GetMem(pucPHMsg,1024);
GetMem(uiCHMsgLen,64);
GetMem(uiPHMsgLen,64);
错误是没跳出来了,但数据读不到,返回码是1,也就是:端口打开失败/端口尚未打开/端口号不合法
真奇怪了,前面的函数都没问题
zhangl 2007-09-24
  • 打赏
  • 举报
回复
是的, 由调用者申请空间
onhu 2007-09-24
  • 打赏
  • 举报
回复
是不是要申请内存?
onhu 2007-09-24
  • 打赏
  • 举报
回复
还是不行,同一个错……
你们有没有完整的源码?
zhangl 2007-09-24
  • 打赏
  • 举报
回复

function SDT_ReadBaseMsg(iPort:Integer;
pucCHMsg:PChar;
var puiCHMsgLen:Integer; //此处定义成变参更方便一些
pucPHMsg:PChar;
var puiPHMsgLen:Integer;
iIfOpen:Integer):Integer;stdcall;external 'sdtapi.dll';
hongqi162 2007-09-24
  • 打赏
  • 举报
回复
function SDT_ReadBaseMsg(iPort:Integer;
pucCHMsg:PChar;
puiCHMsgLen:PInteger;
pucPHMsg:PChar;
puiPHMsgLen:PInteger;
iIfOpen:Integer):Integer;stdcall;external 'sdtapi.dll';
onhu 2007-09-24
  • 打赏
  • 举报
回复
没有,只提供了公安部的那个dll 和API函数的说明
zhangl 2007-09-24
  • 打赏
  • 举报
回复
文档中没有说明么?

onhu 2007-09-24
  • 打赏
  • 举报
回复
是不是SDT_ReadBaseMsg以后还得处理数据啊?
onhu 2007-09-24
  • 打赏
  • 举报
回复
还是一样的

5,931

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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