線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1806
推到 Plurk!
推到 Facebook!

调用DLL文件中的FORM

 
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-31 16:59:00 IP:61.155.xxx.xxx 未訂閱
好久发表文章了!!! 调用 class="code"> 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;    ....
jesselian
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-07 18:08:44 IP:82.133.xxx.xxx 未訂閱
[LibEdit] library LibEdit; uses SysUtils, Classes, main in 'main.pas' {LibEditForm}, {$R *.res} exports ShowLib; begin end. [main.pas] Interface procedure ShowLib(Sender: TForm); stdcall; implementation procedure ShowLib(Sender :TForm); begin AppForm := Sender; Application.Handle := AppForm.Handle; LibEditForm := TLibEditForm.Create(Application); try LibEditForm.ShowModal; finally LibEditForm.Free; LibEditForm := nil; end; end; procedure TLibEditForm.FormCreate(Sender: TObject); begin ----------------------------------------------------- code看起来简单一点! 请问有什么区别嘛?
系統時間:2024-05-20 1:03:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!