delphi和PB 动态库的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 wrf
  • 开始时间 开始时间
W

wrf

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何从delphi传递字符串参数给你pb
如正常的delphi函数如下
function test(s1:string ;var s2,s3,s4:string):integer;
如何改动后,pb能够正常识别
如果如上,pb的能够调用,但是返回的内容不对
 
请问如何从delphi传递字符串参数给你pb
如正常的delphi函数如下
function test(s1:string ;var s2,s3,s4:string):integer;
如何改动后,pb能够正常识别
如果如上,pb的能够调用,但是返回的内容不对
 
function test(s1:pchar;s2,s3,s4:pChar):integer;
 
使用pchar这种方式是不行我已经试过了
function test(s1:string ;var s2,s3,s4:string):integer;stdcall;
希望delphi和pb高手出手
 
肯定行!
我一直这么做,而且调用动态库的开发语言还有VF、VB等,都可以
 
谢谢你!
下面是简单的函数
UNIT te1;

INTERFACE
FUNCTION w_set_clock(com: pchar; var clock: pchar): integer; stdcall;
IMPLEMENTATION

FUNCTION w_set_clock(com: pchar; var clock: pchar): integer; stdcall;
VAR
len: integer;
BEGIN
clock := '1234567890';
result := 1;
END;

END.

PB的调用
FUNCTION INTEGER w_set_clock(STRING com, string clock) library "test.dll"
string mm1

w_set_clock("1",mm1)
st_2.text=mm1

就是不行,请告诉好的办法,或向简单的例子
谢谢
 
1、
FUNCTION w_set_clock(com: pchar; var clock: pchar): integer; stdcall;
改为(pchar为指针)
FUNCTION w_set_clock(com: pchar; clock: pchar): integer; stdcall;
2、
PB的调用
FUNCTION INTEGER w_set_clock(STRING com, string clock) library "test.dll"
改为(传出型参数为ref,调用时需预先分配内存)
FUNCTION INTEGER w_set_clock(STRING com, Ref string clock) library "test.dll"
 
谢谢你.
问题还是没有解决
调用时预先分配内存如何处理?
其它的地方还有没有需要注意的地方?
 
s = space(100); //对于传出的字符型参数,预先分配内存
w_set_clock(s1, s) ;
 
这是一个PB调用Delphi的dll的例子
www.hitekersoft.com/download/demoforpb65.pbl
 
xianguo, 说的没错, 就是这么来的
 
高手在哪,出來啊
 
我的QQ:333868想与你交流一下
 
说的感觉都不错,就是问题还没有解决
 
我已经把函数改成
1 delphi
FUNCTION w_set_clock(com: pchar; clock: pchar): pchar; stdcall;
BEGIN
clock := '321';
result := '123';
END;
2 PB
string sCardID=space(16)
string com=space(2)
com="1"
sle_3.text= w_set_clock(com,sCardID)
sle_4.text=scardid

能够返回123,但是没有321的这个值
 
1、首先要保证你的dll没问题
2、PB不能调用还是调用结果不对?
 
PB 调用是没有什么问题
library test;

uses
// ShareMem,
SysUtils,
Classes,
te1 in 'te1.pas';

exports w_set_clock;
{$R *.res}
begin

end.
UNIT te1;

INTERFACE
//uses ShareMem;
FUNCTION w_set_clock(com: pchar; clock: pchar): pchar; stdcall;
// lptstr
IMPLEMENTATION

FUNCTION w_set_clock(com: pchar; clock: pchar): pchar; stdcall;
BEGIN
clock := '321';
result := '123';
END;

END.
以上是DLL的全部内容
 
PB代码
string mm1=space(100)
w_set_clock("1",mm1)
st_2.text=mm1

开发环境 PB6.5 D6
 
//Delphi
FUNCTION w_set_clock(com: pchar; clock: pchar): pchar; stdcall;
BEGIN
StrPCopy(clock, '321');
StrPCopy(result, '123');
END;

PB代码
string mm1=space(100)
string mm2='1'
string sresult=space(100)
sresult = w_set_clock(mm2,mm1)
st_2.text=mm1
 
后退
顶部