PB调用DELPHI的DLL之间传值的问题,大家来看看 Delphi / Windows SDK/API http://www.delphi2007.net/DelphiAPI/html/delphi_20061110115522258.html
PB的主程序调用DELPHI的DLL,DLL在函数执行完后回传一个字符串给PB主程序,DLL里用的是PCHAR类型。。PB下该怎么接收? int RC,SectorID=15,i=1 char ReadStr[64] int li_data[64] char ls_data[64] string data='' Rc = M1QueryCard(15,ref ReadStr) do while i<=64 li_data[i]=asc(ReadStr[i]) ls_data[i]=get_hex(li_data[i]) i++ loop //ReadStr=get_hex_str(ReadStr) messagebox('FOXHIS',ls_data) 以上是PB的程序。。。 M1QueryCard(15,ref ReadStr) 这个是我DELPHI写的DLL里的函数。。ReadStr 是DLL以PCHAR类型回传的一个字符串 现在这样不能用,读不到数据。。哪位知道是什么问题么
把你的delphi的dll函数类型,及相关代码也贴一下,否则怎么看得出来呢?
DELPHI的DLL代码: var ReadCardDataHex: string; //全局变量 Function M1QueryCard(SectorID:Shortint;var CardDatas:PChar):integer; stdcall; //查询卡 var .... HexData1,HexData2: string; begin ..... for i:=0 to 15 do begin HexData2:= HexData2+IntToHex(CardData2[i],2); end; end; ReadCardDataHex := HexData1+HexData2; CardDatas:=Pchar(ReadCardDataHex); result:=0; end; 我DELPHI程序这样调用正常: Function M1QueryCard(SectorID:Shortint;var CardDatas:PChar):integer;stdcall;external M1Dll;
pb调用delphi中dll,这种不同开发工具之间调试问题; 可以这样做,用delphi写一个小小的测试程序,用于测试dll,确保dll功能正确后,再由PB调用测试; 注意PB中的External Functions中,定义的dll输出类型要正确,一般来说,应该没有什么太大的问题的。
哦,这么快就贴出来了, 我觉得问题在这里: CardDatas:=Pchar(ReadCardDataHex);//ReadCardDataHex是一个String类,这仅仅是指针指向而已, 改成这样试试: StrCopy(CardDatas,ReadCardDataHex);
StrCopy(CardDatas,pchar(ReadCardDataHex)); 要这样才能编译。。这样也不行,程序死掉了。DLL里的代码还没执行完就提示 XX错误,问要不要发送了。。
你的M1QueryCard在PB中是怎么声明的呀?
Function int M1QueryCard(int SectorID,ref string CardDatas) library 'm1.dll'; 以前是这样定义的,不能用。不知道对方现在有没改动过
我不记得PB中的string是什么特别的类型了,改为 在delphi中Pchar,就是cha指针,而你上面的PB代码:char ReadStr[64]; 定义改为这样试试: Function int M1QueryCard(int SectorID,ref char* CardDatas) library 'm1.dll'; 呵呵,我也不确定是否行,有几年没有用PB了,忘记了
另外,你的delphi测试代码是怎么调用的呢? 如果dll的第二个参数不用var,会怎么样,这样试试: Function M1QueryCard(SectorID:Shortint;CardDatas:PChar):integer; stdcall; //查询卡 ...
不用VAR会得不到回传的值。 DELPHI调用时声明为: Function M1QueryCard(SectorID:Shortint;var CardDatas:PChar):integer;stdcall;external 'm1.dll'; 唉。郁闷。。现在搞不定。。用简单的方法用着。。我把读出的数据保存为文本文件,对方打开文件读进来处理。。
这样定义: Function M1QueryCard(SectorID:Shortint;CardDatas:PChar):integer; stdcall; delphi中,pchar类型,不用var也是可以返回数据的, var cc:Array [0..256] of char ii:shortint; begin M1QueryCard(i,cc); showmessage(cc);//这样是可以返回数据的吧
这样试试: delphi的dll中: Function M1QueryCard(SectorID:Shortint;CardDatas:PChar):integer; stdcall; PB声明: Function int M1QueryCard(int SectorID,ref string CardDatas) library 'm1.dll'; 如果这样都不行,呵呵,也想不什么问题了,我的机子上的PB早就删除了
噢。郁闷。。这样没试过。我的DELPHI程序调用是没问题的。现在就是PB有问题。。 下午跟对方说好了。。我保存成文件,他来读。。现在靠这样传数据。。汗。。真郁闷
PB程序可以这样写: int RC,SectorID=15,i=1 string ReadStr int li_data[64] char ls_data[64] string data='' readstr = spaces(64) Rc = M1QueryCard(15,ReadStr) PB声明: function M1QueryCard(integer len,ref string ReadStr) ...... Delphi程序这样写试试: Function M1QueryCard(SectorID:integer;CardDatas:PChar):integer; stdcall;
shortint PB不支持。
用 FastMM
|
请发表评论