作者:e梦缘
好久发表文章了!!!
调用DLL文件中的FORM,具体实现过程如下:
library Project1; uses SysUtils, Classes,Forms,windows,dialogs, Unit1 in ''''Unit1.pas'''' {Form1}; {$R *.res} function showform(formname:string):boolean;stdcall; var TheClass: TPersistentClass; aForm: TForm; begin result:=false; {如果您的Dll中有很多FORM,请在这儿注册哦 RegisterClasses([TForm1,TForm2,TForm3,...]); } RegisterClasses([TForm1]); TheClass := GetClass(''''T'''' + FormName); if (TheClass = nil) then exit; if TheClass.InheritsFrom(TForm) then begin aForm := Tform(TheClass.Create).Create(nil); try aForm.ShowModal; result:=true; finally FreeAndNil(aForm); end; end; end; exports showform; begin end.
.... procedure RunDllForm(const DllFileName,DllFormName:String;const methodName:string); type TRunForm=function(formname:string):boolean;stdcall; var RunForm: TRunForm; GetDllHWND: HWND; begin GetDllHWND := LoadLibrary(PChar(DllFileName)); try if GetDllHWND < 32 then begin MessageBox(0, Pchar(''''没有找到''''+DllFileName+''''DLL文件!''''),''''加载DLL失败'''', MB_OK); Exit; end; @RunForm := GetProcAddress(GetDllHWND,pchar(methodName)); if @RunForm <> nil then try RunForm(DllFormName); except raise Exception.Create(''''对不起,找不到T'''' + DllFormName+ ''''窗体!''''); end else raise Exception.Create(''''无效的方法名调用''''); finally FreeLibrary(GetDllHWND); end; end; procedure TForm1.Button1Click(Sender: TObject); begin RunDllForm(''''project1.dll'''',''''form1'''',''''showform''''); end; ....
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18