Jer*_*dge 3 embed delphi dll inno-setup
我已经在Inno安装过程中显示的Delphi DLL中构建了一些VCL表单.但是,如果我可以将这些表单嵌入到Inno Setup向导中,那将更加简洁.
我该怎么做呢?
最简单的方法是创建一个导出的函数,它将完成库中的所有操作.此函数的必要最小值是Inno Setup控件的句柄的参数,应将表单嵌入到该控件中.嵌入时需要了解的下一个必要条件是绑定,但是可以通过Windows API函数调用那些在库侧调用.
这是Delphi部分,显示带有DLL项目表单的单元:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TEmbeddedForm = class(TForm)
StringGrid1: TStringGrid;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
procedure CreateEmbeddedForm(ParentWnd: HWND); stdcall;
implementation
{$R *.dfm}
{ TEmbeddedForm }
procedure TEmbeddedForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
{ CreateEmbeddedForm }
procedure CreateEmbeddedForm(ParentWnd: HWND); stdcall;
var
R: TRect;
Form: TEmbeddedForm;
begin
Form := TEmbeddedForm.Create(nil);
Form.ParentWindow := ParentWnd;
Form.BorderStyle := bsNone;
GetWindowRect(ParentWnd, R);
Form.BoundsRect := R;
Form.Show;
end;
exports
CreateEmbeddedForm;
end.
Run Code Online (Sandbox Code Playgroud)
这是Inno安装脚本:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Files]
Source: "MyDLL.dll"; Flags: dontcopy
[Code]
procedure CreateEmbeddedForm(ParentWnd: HWND);
external 'CreateEmbeddedForm@files:MyDLL.dll stdcall';
procedure InitializeWizard;
var
CustomPage: TWizardPage;
begin
CustomPage := CreateCustomPage(wpWelcome, 'Caption', 'Description');
CreateEmbeddedForm(CustomPage.Surface.Handle);
end;
Run Code Online (Sandbox Code Playgroud)
需要注意的是,Inno Setup也支持COM Automation,因此上述方法并不是如何将对象嵌入向导形式的唯一选择.但是,这是最简单的一个.
哦,还有一张纸条,可能对你有用.如果您需要从库中执行某个Inno Setup脚本代码,可以通过在Inno Setup端创建一个回调函数并在DLL端传递并执行它来实现.