我用EXE 调用DLL1(包含数据模板)用如下方法:
TMyProc=procedure(AHandle: THandle;ARect:TRect;APopedom:Integer);Stdcall;
procedure ShowDllForm(AProc:TMyProc;AProcname,ADllName:String);
begin
MyHandle:=LoadLibrary(PChar(ADllName);
try
if MyHandle <> 0 then
@AProc:=GetProcAddress(MyHandle,PChar(AProcname));
if not (@AProc = nil) then
begin
AProc(0,MyRect,MyPopedom);
end else
RaiseLastOsError;
finally
FreeLibrary(MyHandle);
end;
end;
系统运行正常,可是我想用EXE调用DLL1,然后通过DLL1调用DLL2(包含数据模板)时,系统提示错误!哪位大侠可以帮我啊?
DLL1 调用部分
TIniProc=procedure;Stdcall; //创建、释放数据模板
procedure TfrmSysMain.FormCreate(Sender: TObject);
var
IniDmUserMg:TIniProc;
begin
ShowDllIni(IniDmUserMg,'IniDmUserMg','SysUserMg.dll');
end;
procedure TfrmSysMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
FreeDmUserMg:TIniProc;
begin
ShowDllIni(FreeDmUserMg,'FreeDmUserMg','SysUserMg.dll');
end;
procedure TfrmSysMain.Button6Click(Sender: TObject);
var
ShowEmployeeMg:TMyProc;
begin
ShowDllForm(ShowEmployeeMg,'ShowEmployeeMg','SysUserMg.dll');
end;
DLL2 的部分
procedure ShowEmployeeMg(AHandle: THandle;ARect:TRect;APopedom:integer);stdcall;
begin
Application.Handle:=AHandle;
if frmEmployeeMg=nil then
frmEmployeeMg:=TfrmEmployeeMg.Create(Application);
try
frmEmployeeMg.BoundsRect:=ARect;
frmEmployeeMg.popedom:=APopedom;
frmEmployeeMg.ShowModal;
finally
frmEmployeeMg.free;
end;
end;
procedure IniDmUserMg;
begin
Application.CreateForm(TdmUserMg,dmUserMg);//创建数据模板
end;
procedure FreeDmUserMg;
begin
dmUserMg.Free; //释放数据模板
end;
TMyProc=procedure(AHandle: THandle;ARect:TRect;APopedom:Integer);Stdcall;
procedure ShowDllForm(AProc:TMyProc;AProcname,ADllName:String);
begin
MyHandle:=LoadLibrary(PChar(ADllName);
try
if MyHandle <> 0 then
@AProc:=GetProcAddress(MyHandle,PChar(AProcname));
if not (@AProc = nil) then
begin
AProc(0,MyRect,MyPopedom);
end else
RaiseLastOsError;
finally
FreeLibrary(MyHandle);
end;
end;
系统运行正常,可是我想用EXE调用DLL1,然后通过DLL1调用DLL2(包含数据模板)时,系统提示错误!哪位大侠可以帮我啊?
DLL1 调用部分
TIniProc=procedure;Stdcall; //创建、释放数据模板
procedure TfrmSysMain.FormCreate(Sender: TObject);
var
IniDmUserMg:TIniProc;
begin
ShowDllIni(IniDmUserMg,'IniDmUserMg','SysUserMg.dll');
end;
procedure TfrmSysMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
FreeDmUserMg:TIniProc;
begin
ShowDllIni(FreeDmUserMg,'FreeDmUserMg','SysUserMg.dll');
end;
procedure TfrmSysMain.Button6Click(Sender: TObject);
var
ShowEmployeeMg:TMyProc;
begin
ShowDllForm(ShowEmployeeMg,'ShowEmployeeMg','SysUserMg.dll');
end;
DLL2 的部分
procedure ShowEmployeeMg(AHandle: THandle;ARect:TRect;APopedom:integer);stdcall;
begin
Application.Handle:=AHandle;
if frmEmployeeMg=nil then
frmEmployeeMg:=TfrmEmployeeMg.Create(Application);
try
frmEmployeeMg.BoundsRect:=ARect;
frmEmployeeMg.popedom:=APopedom;
frmEmployeeMg.ShowModal;
finally
frmEmployeeMg.free;
end;
end;
procedure IniDmUserMg;
begin
Application.CreateForm(TdmUserMg,dmUserMg);//创建数据模板
end;
procedure FreeDmUserMg;
begin
dmUserMg.Free; //释放数据模板
end;
在BEGINEND之间加入APPLICATION.CREATE(T名称,名称);