静态/动态调用dll封装窗体(模态/非模态)
2013-03-14 08:47
441 查看
看到有网友需要这样的例子,所以写了一个.
有不对或不合理的地方请跟帖指导.
delph XE下测试通过.
Dll项目文件
dll中窗体关闭事件
调用单元
有不对或不合理的地方请跟帖指导.
delph XE下测试通过.
Dll项目文件
library Project10; uses SysUtils, Classes, Forms, Unit14 in 'Unit14.pas' {Form1}; {$R *.res} Function EDebtMoney(H: THandle): integer; begin Application.Handle := H; with TForm1.Create(Application) do try ShowModal; Result := 0; finally Free; { 调用结束时销毁窗口 } end; end; Function GetForm(H: THandle): THandle; begin Application.Handle := H; with TForm1.Create(Application) do try Show; Result := Handle; except on e : Exception do raise e.Create(e.Message); end; end; exports EDebtMoney, GetForm; begin end.
dll中窗体关闭事件
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
调用单元
unit Unit13; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm13 = class(TForm) btn1: TButton; btn2: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form13: TForm13; function MyForm(H: THandle) : THandle; stdcall; implementation function MyForm; external 'Project10.dll' name 'GetForm'; {$R *.dfm} //动态调用 模态窗口 procedure TForm13.btn1Click(Sender: TObject); type TGetForm = function (H: THandle) : Integer; cdecl; var DllForm : TGetForm; DllHandle : THandle; nn : integer; begin DllHandle := LoadLibrary(PChar('Project10.dll')); try if DllHandle <> 0 then begin DllForm := GetProcAddress(DllHandle, 'EDebtMoney'); nn := DllForm(Application.Handle) ; self.Caption := inttostr(nn); end; finally FreeLibrary(DllHandle); end; end; //静态调用 非模态窗口 procedure TForm13.btn2Click(Sender: TObject); var DllHandle : THandle; begin DllHandle := MyForm(Application.Handle); end; end.
相关文章推荐
- 在vs中用C的编程方式生成.dll文件并且动态、静态调用dll中的函数
- C# 中静态调用C++dll 和C# 中动态调用C++dll
- .h .lib .dll文件,静态链接库与动态链接库,静态调用与动态调用
- DLL静态(显示)调用,动态(隐式)调用
- Delphi编写DLL(以及静态和动态方式调用)
- vc 调用dll 静态调用和动态调用.
- Delphi 动态与静态调用DLL
- 调用DLL有两种方法(静态调用和动态调用)简介
- C++调用DLL有两种方法——静态调用和动态调用
- VB静态调用与动态调用dll详解
- 动态和静态调用DLL
- [轉]c#简单调用DELPHI DLL封装窗体
- Delphi 类库(DLL)动态调用与静态调用示例讲解
- DLL的静态调用和动态调用
- DLL专题之动态连接库的静态调用(2)
- dll 调用,动态,静态
- VC中使用动态链接库DLL:静态调用和动态调用
- C# 中静态调用C++dll 和C# 中动态调用C++dll
- 在C++中调用DLL中的函数——静态调用和动态调用
- [C-C++]DLL之旅2 : 调用DLL(静态&动态加载)