Delphi DLL封装与调用实践
Delphi 里的 DLL 封装和调用,算是老生常谈但又实用的技能了。模块化管理、提高复用率、还不占多少内存,挺香的。尤其是你做大型项目或抽离通用逻辑时,用 DLL 真的是明智之选。
DLL 的创建比较简单,新建项目选Dynamic Link Library
模板就行。函数导出用exports
,调用约定记得加stdcall
,避免参数乱序。像这样:
library MyDLL;
uses SysUtils;
exports MyFunction;
function MyFunction(const Message: string): string; stdcall;
begin
Result := 'Hello, ' + Message;
end.
要在 DLL 里封装类?那得稍微绕点,记得用RegisterClasses
注册一下:
type
TMyClass = class(TObject)
public
procedure DoSomething;
end;
procedure Register;
begin
RegisterClasses([TMyClass]);
end;
exports Register;
主程序这边,用LoadLibrary
加载 DLL,用GetProcAddress
拿函数指针。调用导出函数后,还可以通过GetClass
实例化类:
HModule := LoadLibrary('MyDLL.dll');
if HModule > 0 then
try
MyFunctionPtr := GetProcAddress(HModule, 'MyFunction');
if Assigned(MyFunctionPtr) then
ShowMessage(MyFunctionPtr('World'));
MyClassInstance := GetClass('TMyClass') as TMyClass;
if MyClassInstance <> nil then
begin
MyClassInstance.DoSomething;
MyClassInstance.Free;
end;
finally
FreeLibrary(HModule);
end;
Delphi 中的 DLL 封装和调用对象技术.pdf
讲得比较细,包括多线程调用、跨进程类实例化等进阶内容,还有源码包ddjcode.zip
,你可以直接跑一遍看看效果。
如果你最近在做插件式架构,或者想让逻辑代码更清晰独立,这份资源值得花点时间研究一下。
评论区