P
pandababy
Unregistered / Unconfirmed
GUEST, unregistred user!
我现在是静态调用成功,<br>但动态调用时sumnum出现错误,AddNumber不出现错五但好象没有执行<br>//以下为定义DLL<br>library Project1;<br><br>{ Important note about DLL memory management: ShareMem must be the<br> first unit in your library's USES clause AND your project's (select<br> Project-View Source) USES clause if your DLL exports any procedures or<br> functions that pass strings as parameters or function results. This<br> applies to all strings passed to and from your DLL--even those that<br> are nested in records and classes. ShareMem is the interface unit to<br> the BORLNDMM.DLL shared memory manager, which must be deployed along<br> with your DLL. To avoid using BORLNDMM.DLL, pass string information<br> using PChar or ShortString parameters. }<br><br>uses<br> SysUtils,<br> Classes;<br><br>{$R *.res}<br>function AddNumber(Num1,Num2:integer):integer;stdcall; //定义求和函数<br>begin<br> result:=Num1+Num2;<br>end;<br><br>procedure sumnum(N1,N2:integer;var sumn:integer);stdcall;<br>begin<br> sumn:=N1+N2;<br>end;<br><br>exports<br><br> AddNumber , sumnum;<br>begin<br>end.<br><br><br>//以下为调用<br>unit Unit2;<br><br>interface<br><br>uses<br> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> Dialogs, StdCtrls;<br><br>type<br>TAddNum = function(Num1,Num2:integer):integer;<br>TsumNum = function(Num1,Num2:integer;var sumn:integer):integer;<br>THandle = Integer;<br><br> TForm2 = class(TForm)<br> Edit1: TEdit;<br> Edit2: TEdit;<br> Edit3: TEdit;<br> Button1: TButton;<br> Edit4: TEdit;<br> procedure Button1Click(Sender: TObject);<br> private<br> { Private declarations }<br> public<br> { Public declarations }<br> end;<br><br>var<br> Form2: TForm2;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm2.Button1Click(Sender: TObject);<br>var<br> Handle: THandle;<br> AddNum1: TAddNum;<br> sumnum1: TsumNum;<br> Number1,Number2:integer;<br> Sum:integer;<br>begin<br> sum:=0;<br> Handle := LoadLibrary('Project1.dll');<br> if Handle <> 0 then<br> begin<br> @AddNum1 := GetProcAddress(Handle, 'AddNumber');<br> @sumnum1 := GetProcAddress(Handle, 'sumnum');<br> if (@AddNum1 <> nil) and (@sumnum1<>nil) then<br> begin<br> Number1:=strtoint(Edit1.Text);<br> Number2:=strtoint(Edit2.Text);<br> sum:=AddNum1(Number1,Number2); //调用求和函数计算结果<br> Edit3.Text:=inttostr(Sum);<br> sumnum1(Number1,Number2,Sum);<br> Edit4.Text:=inttostr(Sum);<br> end;<br> end;<br> FreeLibrary(Handle); <br>end;<br><br>end.