调用DLL文件中的FORM |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
好久发表文章了!!! 调用 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 發送簡訊給我 |
[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看起来简单一点! 请问有什么区别嘛?
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |