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

Description of your first forum.

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

帖子lin315 » 星期一, 2010年3月15日 11:04


你能帮我为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.
 
 
 

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

帖子zhengrong117 » 星期一, 2010年3月15日 11:20


具体啥错误?
调用出错还是结果不符合你的要求?
 
 
 

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

帖子lin315 » 星期一, 2010年3月15日 11:29


提示出错: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
 
 
 

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

帖子tseug » 星期一, 2010年3月15日 11:55


看看这句吧,

  a1:= Result;

字符串不是你那样赋值的,[:(],一个原则,申请足够的空间,再把内容拷贝过去
 
 
 

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

帖子lin315 » 星期一, 2010年3月15日 11:58


这一句不要也不行,还是一样的错误。这一句我是想把值给变量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.
 
 
 

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

帖子tseug » 星期一, 2010年3月15日 12:35


如果你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.
 
 
 

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

帖子dorry » 星期一, 2010年3月15日 13:52


老弟,我看你的delphi 的函数声明有问题?你想干啥呀?
 
 
 

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

帖子lin315 » 星期一, 2010年3月15日 13:57


我想用DELPHI写个DLL可以让PB程序读的。大哥帮我整一个吧。
 
 
 

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

帖子lin315 » 星期一, 2010年3月15日 17:22


dorry大哥帮我整一下吧。
 
 
 

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

帖子kk2000 » 星期一, 2010年3月15日 20:29


//下面是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 str3

str3 = space(30)

read('你好', '小弟', str3)

sle_1.text = str3
刚好今晚我也写dll给PB调用, 你碰上我好运啊! 呵呵