dll中传递字符串参数问题 ( 积分: 50 )

  • 主题发起人 主题发起人 shenxinli
  • 开始时间 开始时间
S

shenxinli

Unregistered / Unconfirmed
GUEST, unregistred user!
在MyDll.Dll中如此定义
function MyFunc(var s:pChar):pChar;stdcall;
begin
Result:=s
//在这里查看到s的值为'h?'
end;

在外部工程文件中如此定义调用
function MyFunc(var s:pChar):pChar;external 'MyDll.Dll';

procedure TfrmMain.Button1Click(Sender: TObject);
var
a:Pchar;
begin
a:=pChar(edit1.Text);
edit1.text:=MyFunc(a);
end;

不知道是什么原因?请各位帮帮忙。
 
在MyDll.Dll中如此定义
function MyFunc(var s:pChar):pChar;stdcall;
begin
Result:=s
//在这里查看到s的值为'h?'
end;

在外部工程文件中如此定义调用
function MyFunc(var s:pChar):pChar;external 'MyDll.Dll';

procedure TfrmMain.Button1Click(Sender: TObject);
var
a:Pchar;
begin
a:=pChar(edit1.Text);
edit1.text:=MyFunc(a);
end;

不知道是什么原因?请各位帮帮忙。
 
function MyFunc(var s:pChar):pChar;stdcall;
不要这样返回一个指针
改为
procedure MyFunc(var s:pChar);stdcall;
begin
//查看一下
application.messagebox(s,'msg',64)

end;
 
能不能说清楚一点是什么问题
 
刚写了个简单的例子,你看看:
定义:
function PlusStr(S1,S2:String):PChar;StdCall
//定义
begin
Result:=PChar(S1 + S2);
end;

exports
PlusStr
//引出函数

在工程里面声明:
function PlusStr(s1,s2:string):PChar;StdCall
external 'MyDLL.dll';
调用:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text:=PlusStr(Edit1.Text,Edit2.Text)

end;
 
原来在exe工程调用时,定义函数时没有写 StdCall;
谢谢各位帮忙
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
671
import
I
后退
顶部