你能帮我为PB程序写一个DLL文件?我写的在DELPHI中能调用,可在PB中就不能调用。(200)

L

lin315

Unregistered / Unconfirmed
GUEST, unregistred user!
你能帮我为PB程序写一个DLL文件?我写的在DELPHI中能调用,可在PB中就不能调用。哪里有问题请指点一下。pb调用DLL的函数:public function long read (long b1,long d1,ref string a1) library "project.DLL" alias for "Read"我写的DELPHI的DLL文件:library Project2;uses SysUtils, Classes;
Function read(b1:pchar;d1:pchar;a1:pchar):pchar;
stdcall ;
begin
if (b1='1')and (a1='2')then
Result:= '正确' else
Result:= '错误';
a1:= Result;
end ;{$R *.res} exports read;begin
end.
 
Z

zhengrong117

Unregistered / Unconfirmed
GUEST, unregistred user!
具体啥错误?调用出错还是结果不符合你的要求?
 
L

lin315

Unregistered / Unconfirmed
GUEST, unregistred user!
提示出错:powerbuilder application exection error(r0015)application terminated error:err calling external function read at line 2 in clicked event of object cb_1 of main
 
T

tseug

Unregistered / Unconfirmed
GUEST, unregistred user!
看看这句吧, a1:= Result;字符串不是你那样赋值的,[:(],一个原则,申请足够的空间,再把内容拷贝过去
 
L

lin315

Unregistered / Unconfirmed
GUEST, unregistred user!
这一句不要也不行,还是一样的错误。这一句我是想把值给变量a1,要怎么样赋值呢???? 我现在改成这样还是不行。library Project2;uses SysUtils, Classes;
Function read(b1:pchar;d1:pchar;a1:pchar):integer;
stdcall ;
begin
if (b1='1')and (a1='2')then
Result:= 1 else
Result:= 2;
end ;{$R *.res} exports read;begin
end.
 
T

tseug

Unregistered / Unconfirmed
GUEST, unregistred user!
如果你PB中的声明是你说的那样public function long read (long b1,long d1,ref string a1) library "project.DLL" alias for "Read"那么相应的Delphi代码应该是library Project2;uses SysUtils, Classes;function read(b1:Integer;
d1:Integer;
a1:pchar):integer;
stdcall ;
begin
if (b1=1)and (a1=2)then
Result:= 1 else
Result:= 2;
end ;{$R *.res} exports Read;begin
end.
 
D

dorry

Unregistered / Unconfirmed
GUEST, unregistred user!
老弟,我看你的delphi 的函数声明有问题?你想干啥呀?
 
L

lin315

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用DELPHI写个DLL可以让PB程序读的。大哥帮我整一个吧。
 
L

lin315

Unregistered / Unconfirmed
GUEST, unregistred user!
dorry大哥帮我整一下吧。
 
K

kk2000

Unregistered / Unconfirmed
GUEST, unregistred user!
//下面是delphi 的定义代码Function read(b1: pchar;
d1: pchar;
a1: pchar):integer;
export;
stdcall ;Function read(b1: pchar;
d1: pchar;
a1: pchar):integer;
stdcall ;var str: String;begin
str := String(b1) + String(d1);
if length(str) > 0 then
Move(Str[1], a1^, length(str));
Result := 0;
end ;PB里面的定义和调用分别是:function long read(string str1, string str2, ref string str3) LIBRARY "project.DLL" PB调用代码:string str3str3 = space(30)read('你好', '小弟', str3)sle_1.text = str3刚好今晚我也写dll给PB调用, 你碰上我好运啊! 呵呵
 
顶部