library Project5; //编写 dll项目;uses
SysUtils,ShareMem,
Classes,WinTypes,WinProcs,
Unit1 in 'Unit1.pas'; function Fun2():integer;export;
begin
Fun2:=11;
end;
exports
Fun1,
Fun2 index 2 name 'MyFun2' resident;
//{$R *.res}
var
SaveExit:Pointer;
procedure LibExit;far;
begin ExitProc:=SaveExit;
end;
begin
end.
unit Unit1; // 编写dll单员interface
uses
SysUtils,
Classes,ShareMem; function Fun1(var i:integer):integer;export;
{$R *.dfm}
implementation
function Fun1(var i:integer):integer;
begin
Fun1:=i;
end; end.
//*********************************// unit Unit2; //调用dll单元interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, AMHRollUp, StdCtrls, Buttons;type
TotalRecord=Record
Name: array[1..24] of string;
XinJiao:array[1..24] of integer;
FangXiang:array[1..24]of integer;
end;
TFunction=function():integer;
TForm1 = class(TForm)
RollUp1: TRollUp;
BitBtn1: TBitBtn;
SpeedButton1: TSpeedButton;
procedure BitBtn1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
PFunc:TFarProc;
Moudle:THandle;
Record1:TotalRecord;
implementation{$R *.dfm}
//function Fun2():integer;far;external 'E:\wer\Dll\Project5.dll';//静态调用动态裂解库函数
procedure TForm1.BitBtn1Click(Sender: TObject);
VAR i:integer;
begin
i:=1;
Moudle:=Loadlibrary('e:\wer\dll\Project5.dll');
if Moudle>32 then
begin
Pfunc:=GetProcAddress(Moudle,'MyFun2');
i:=TFunction(Pfunc)();
showmessage(inttostr(i));
FreeLibrary(Moudle);
end;
end;end.
问题:当我开始动态调用并执行fun2(别名:MyFun2)函数后,程序正常,当我的代码一旦运行到 freelibrary(moudle)
或则退出本应用程序时, 就出现一个error对话框,提示为: Runtime error 204 at 011f2700
这个问题怎么解决阿----------------------高手们帮忙阿,小弟先谢谢了
SysUtils,ShareMem,
Classes,WinTypes,WinProcs,
Unit1 in 'Unit1.pas'; function Fun2():integer;export;
begin
Fun2:=11;
end;
exports
Fun1,
Fun2 index 2 name 'MyFun2' resident;
//{$R *.res}
var
SaveExit:Pointer;
procedure LibExit;far;
begin ExitProc:=SaveExit;
end;
begin
end.
unit Unit1; // 编写dll单员interface
uses
SysUtils,
Classes,ShareMem; function Fun1(var i:integer):integer;export;
{$R *.dfm}
implementation
function Fun1(var i:integer):integer;
begin
Fun1:=i;
end; end.
//*********************************// unit Unit2; //调用dll单元interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, AMHRollUp, StdCtrls, Buttons;type
TotalRecord=Record
Name: array[1..24] of string;
XinJiao:array[1..24] of integer;
FangXiang:array[1..24]of integer;
end;
TFunction=function():integer;
TForm1 = class(TForm)
RollUp1: TRollUp;
BitBtn1: TBitBtn;
SpeedButton1: TSpeedButton;
procedure BitBtn1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
PFunc:TFarProc;
Moudle:THandle;
Record1:TotalRecord;
implementation{$R *.dfm}
//function Fun2():integer;far;external 'E:\wer\Dll\Project5.dll';//静态调用动态裂解库函数
procedure TForm1.BitBtn1Click(Sender: TObject);
VAR i:integer;
begin
i:=1;
Moudle:=Loadlibrary('e:\wer\dll\Project5.dll');
if Moudle>32 then
begin
Pfunc:=GetProcAddress(Moudle,'MyFun2');
i:=TFunction(Pfunc)();
showmessage(inttostr(i));
FreeLibrary(Moudle);
end;
end;end.
问题:当我开始动态调用并执行fun2(别名:MyFun2)函数后,程序正常,当我的代码一旦运行到 freelibrary(moudle)
或则退出本应用程序时, 就出现一个error对话框,提示为: Runtime error 204 at 011f2700
这个问题怎么解决阿----------------------高手们帮忙阿,小弟先谢谢了
问题:当我开始动态调用并执行fun2(别名:MyFun2)函数后,程序正常,当我的代码一旦运行到 freelibrary(moudle)
或则退出本应用程序时, 就出现一个error对话框,提示为: Runtime error 204 at 011f2700
这个问题怎么解决阿----------------------高手们帮忙阿,小弟先谢谢了
Moudle:=Loadlibrary('e:\wer\dll\Project5.dll');//-----既然已经静态调用,这名去了吧!
i:=Fun1;//------这样试试,然后去判断I值
那么在调用dll时必须把ShareMem放在其他单元的前面uses
stdcall;
我估计是内存管理方面的问题,不知道哪里出现点问题?网友建议:
通过参数(如:App)将主程序的Applicantion对象传递到DLL的函数中,
然后再DLL中设置Application:=App
我的dll调用时,当程序推出时,也同样有相同的错误提示:,上面网友的改错方法,我觉得可行,。不过具体怎样操作阿
出现错误提示"Invalid Pointer Operation"
如何解决????