首页 > 学院 > 开发设计 > 正文

调用DLL文件中的FORM

2019-11-18 18:20:11
字体:
来源:转载
供稿:网友
 

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


上一篇:程序间参数传递

下一篇:钩子(HOOK)机制的使用

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
学习交流
热门图片

新闻热点

疑难解答

图片精选

网友关注