dll:
function readcard(buffer: PChar; bufferlen: integer): integer;
var
s,f: String;
begin
icdev:=rf_init(initcom,115200);
if icdev<=0 then
begin
result:=-1;
exit;
end;
sector:=1;
block:=4;
loadmode:=0;
st:=rf_card(icdev,1,@snr);
st:=rf_read(icdev,block,@databuff); //读取卡中数据
if st<>0 then
begin
st:=rf_exit(icdev);
result:=0;
Exit;
end else
begin
S := Format('%s',[databuff]);
result := length(s);//min(length(s),bufferlen);
StrPLCopy(buffer,databuff,result);
f := Format('%s',[buffer]);
ShowMessage(f); //有数据
st:=rf_exit(icdev);
end;
end;
call dll:
var
ibuff,ikh: String;
ilen: Integer;
HInst: THandle;
readcard: function(buffer: PChar; bufferlen: integer): integer;
begin
HInst:=LoadLibrary('MemberCard.dll');
try
if HInst >0 then
begin
@readcard:=GetProcAddress(HInst,'readcard');
if @readcard<>nil then
begin
ibuff := '';//stringofchar(' ',11);
ilen := readcard(pchar(ibuff),11);
ShowMessage(IntToStr(ilen)); //数据为11,11位数据没错
if ilen = -1 then
ShowMessage('串口打开失败!')
else if ilen > 0 then
ikh:= copy(ibuff,1,ilen)
else
showmessage('读卡失败!');
end;
ShowMessage(ibuff); //这有问题,没数据??????????
ShowMessage(ikh); //没数据
end else
ShowMessage('MemberCard.dll文件不存在!');
finally
FreeLibrary(HInst);
end;
end;
不知错在那里,帮忙解决下,谢谢!
function readcard(buffer: PChar; bufferlen: integer): integer;
var
s,f: String;
begin
icdev:=rf_init(initcom,115200);
if icdev<=0 then
begin
result:=-1;
exit;
end;
sector:=1;
block:=4;
loadmode:=0;
st:=rf_card(icdev,1,@snr);
st:=rf_read(icdev,block,@databuff); //读取卡中数据
if st<>0 then
begin
st:=rf_exit(icdev);
result:=0;
Exit;
end else
begin
S := Format('%s',[databuff]);
result := length(s);//min(length(s),bufferlen);
StrPLCopy(buffer,databuff,result);
f := Format('%s',[buffer]);
ShowMessage(f); //有数据
st:=rf_exit(icdev);
end;
end;
call dll:
var
ibuff,ikh: String;
ilen: Integer;
HInst: THandle;
readcard: function(buffer: PChar; bufferlen: integer): integer;
begin
HInst:=LoadLibrary('MemberCard.dll');
try
if HInst >0 then
begin
@readcard:=GetProcAddress(HInst,'readcard');
if @readcard<>nil then
begin
ibuff := '';//stringofchar(' ',11);
ilen := readcard(pchar(ibuff),11);
ShowMessage(IntToStr(ilen)); //数据为11,11位数据没错
if ilen = -1 then
ShowMessage('串口打开失败!')
else if ilen > 0 then
ikh:= copy(ibuff,1,ilen)
else
showmessage('读卡失败!');
end;
ShowMessage(ibuff); //这有问题,没数据??????????
ShowMessage(ikh); //没数据
end else
ShowMessage('MemberCard.dll文件不存在!');
finally
FreeLibrary(HInst);
end;
end;
不知错在那里,帮忙解决下,谢谢!
解决方案 »
- 一个看似简单的问题,如何用delphi实现win2k的休眠?
- 哪位正用或用过“胜天财务进销存2003”的,请教下,3Q!
- 求问:delphi 开发的三层架构在WIN2003是否有问题哦.为什么我的用不了呀...
- string怎样转换成pChar??
- 两个ListView同时滚动的问题,跟贴有分
- 高分—如果不够再送~ 关于视频如何存取的问题(数据库sql)!!! 在线等
- delphi+SQL server 向表中添加记录
- 怎样在程序中直接打开一个WORD文件
- Kylix的D版出来了!!!!!!!!!!!!
- delphi怎么调用外部程序并登录
- 关于mscomm组件中settings值的设置问题
- 运行出错 invalid filename 求大侠们给力···
readcard: function(buffer: PChar; bufferlen: integer): integer;stdcall;起码后边应该加上调用约定
var
ibuff,ikh: array[0..11] of char;
begin
ibuff := '';//stringofchar(' ',11);这行会导致问题
ilen := readcard(pchar(ibuff),11);应改为ibuff=AllocMem(20);//大于11就应该可以了。
或者ibuff := ' ';长度应不小于11。
SetLength(ibuffer, 12);
ilen := readcard(@ibuffer[1],11)