-- 注册ActiveX控件
const
CN_EXECUTE_STR =
'
Regsvr32.exe /s %s
';
var
StrPath:
string;
begin
StrPath :=
'
C:\aa.dll
';
WinExec(PChar(Format(CN_EXECUTE_STR, [StrPath])), SW_NORMAL);
end;
----------------------------------------------------------
-调用DLLform
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;
========================================================
第一步: 建一个 DLL 工程, 如图:

然后保存, 我这里使用的名称都是默认的.
第二步: 建一个资源原文件, 如图:

编辑内容如下(路径中的文件一定要存在):
img1 BITMAP "c:\temp\test.bmp"
然后, 取个名(后缀须是 rc, 我这里取名为 Res.rc), 保存在工程目录下.
第三步: 在 DLL 工程中添加这个资源原文件, 如图:

此时, 工程源文件中会添加一句: {$R 'Res.res' 'Res.rc'}, 我们需要的源文件这样即可:
library Project1;{$R 'Res.res' 'Res.rc'}beginend.
然后 Ctrl+F9 编译; 此时在工程目录下会生成我们需要的 Project1.dll.
第四步: 把刚才的 Project1.dll 文件复制到 c:\temp 下.
这样过会我们可以通过 c:\temp\Project1.dll 找到这个文件. 至此 DLL 制作完毕.
第五步: 重新建一个 VCL Forms Application 工程, 代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
var
h: THandle;
bit: TBitmap;
begin
h := LoadLibrary('c:\temp\Project1.dll'); {载入 DLL}
bit := TBitmap.Create;
bit.LoadFromResourceName(h, 'img1'); {提取资源}
Canvas.Draw(10, 10, bit); {在窗体上绘制图片}
FreeLibrary(h); {载卸 DLL}
bit.Free;
end;
end.