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,你可以直接跑一遍看看效果。

如果你最近在做插件式架构,或者想让逻辑代码更清晰独立,这份资源值得花点时间研究一下。

rar 文件大小:433.09KB