敬业的IT人 >> 编程开发 >> Delphi >> 调用DLL文件中的FORM

调用DLL文件中的FORM

敬业的IT人 互联网 佚名 2008-1-4 16:38:56

作者: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;exportsshowform;beginend.



....procedure  RunDllForm(const DllFileName,DllFormName:String;const methodName:string);typeTRunForm=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);beginRunDllForm('project1.dll','form1','showform');end;....

粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com