请教一个DLL兼容性的问题 100分(100分)

  • 主题发起人 主题发起人 rob
  • 开始时间 开始时间
R

rob

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DELPHI写了一个非常简单的DLL做试验,让VB调用,
发现用除了PCHAR类型以外得所有类型做为传递参数在VB就能调用成功,可是一用PCHAR,
VB调用的时候老是关闭性错误!
请那位高人指点迷经(函数调用一定得有字符参数)
程序如下:
Delphi DLL
**********************************
library Project1;
uses
SysUtils,
Classes;

{$R *.res}
function robtest(VAR buf:pchar):integer;stdcall;
begin
buf:='rob';
result:=2003;
end;

exports
robtest;
begin
end.
*************************************************
VB 调用程序
Private Declare Function robtest Lib "c:/windows/desktop/dll/test/Project1.dll" (ByVal buf As String) As Long

Private Sub Command1_Click()
Dim a As Integer
Dim bb As String
a = robtest(bb)
Text1.Text = Text1.Text + bb + ";" + Str(a)
End Sub
**************************************************

 
begin
buf:='rob'
//这里你buf是pchar指针,你给指针赋字符串的值有问题吧。
result:=2003;
end;

 
我改成如下还是不行,另虽然PCHAR位指针,但是可以和STRING类型相互赋值
var
temp:string;
begin
buf:=pchar(temp)

result:=2003;
end;
 
你不能这么用
temp的作用域是robtest,当他执行完就被释放了。。所以以后不能再引用了,所以如果你
想传出来需要用GetMem等函数申请空间,然后在主程序释放他,或者,在主程序申请空间
DLL中用Move,StrCopy等函数复制字符串内容,用完后在主程序释放,推荐后一种方法
 
问题自己已经解决了
是DELPHI中function里用Var 声明的参数,在VB调用里不能加Byval
delphi里给PCHAR参数赋值时用,用个string类型变量倒一下
修改后
elphi DLL
**********************************
library Project1;
uses
SysUtils,
Classes;

{$R *.res}
function robtest(VAR buf:pchar):integer;stdcall;
var
tempL:string;
begin
temp:='rob';
buf:=pchar(temp);
result:=2003;
end;

exports
robtest;
begin
end.
*************************************************
VB 调用程序
Private Declare Function robtest Lib "c:/windows/desktop/dll/test/Project1.dll" (buf As String) As Long

Private Sub Command1_Click()
Dim a As Integer
Dim bb As String
a = robtest(bb)
Text1.Text = Text1.Text + bb + ";" + Str(a)
End Sub
**************************************************
 
后退
顶部