初学delphi的dll的问题 ( 积分: 5 )

  • 主题发起人 主题发起人 xieweihua
  • 开始时间 开始时间
X

xieweihua

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi编写了个dll文件全部代码

library Share;
uses
SysUtils,
Classes;
function TestDll(i:integer):integer;stdcall;
var a:integer;
begin
a:=i;
Result:=a;
end;
exports
TestDll;
begin
end.

然后在delphi窗体中调用
.
.
.
.
function TestDll(var i:integer):integer;stdcall
external 'Share.dll';
.
.
procedure TForm1.Button1Click(Sender: TObject);
var a:string;
c:integer;
begin
a:=Edit1.text;
c:=TestDll(strtoint(a))

Edit1.Text:=IntToStr(c);
end;
.
.
为什么dll中的函数的返回值始终是1242440,这个不是我要的结果
 
我用delphi编写了个dll文件全部代码

library Share;
uses
SysUtils,
Classes;
function TestDll(i:integer):integer;stdcall;
var a:integer;
begin
a:=i;
Result:=a;
end;
exports
TestDll;
begin
end.

然后在delphi窗体中调用
.
.
.
.
function TestDll(var i:integer):integer;stdcall
external 'Share.dll';
.
.
procedure TForm1.Button1Click(Sender: TObject);
var a:string;
c:integer;
begin
a:=Edit1.text;
c:=TestDll(strtoint(a))

Edit1.Text:=IntToStr(c);
end;
.
.
为什么dll中的函数的返回值始终是1242440,这个不是我要的结果
 
c:=TestDll(strtoint(b))

Edit1.Text:=IntToStr(b);
返回值在c里面,所以你的最后一句应该是
Edit1.Text := IntToStr(c);
 
不好意思,是我提问的时候把代码写错了,现在改过来了,主要不是因为这个错,是调用dll的函数返回的结果是不对的,不知道为什么?
 
function TestDll([red]var[/red] i:integer):integer;stdcall
external 'Share.dll';
dll里面
function TestDll(i:integer):integer;stdcall;
参数声明不对,dll里面的参数没带var,你的exe里面也不能带var,去掉第一行参数i前面的var后再试试。
 
非常感谢 zqw0117 !
根据你的提示修改后,我可以正确的得到结果了,

谢谢你
 
后退
顶部