Delphi 根据函数名字运行函数

欢迎加入全网最大Delphi 技术交流群 682628230

在Delphi中,你可以使用RTL(运行时库)中的函数 GetProcAddress 来根据函数名称运行函数。这个函码可以在 SysUtils 单元中找到。

以下是一个简单的例子,演示如何根据函数名称调用一个动态库中的函数:

uses
  SysUtils, Windows;
 
// 假设你有一个动态库 DLLTest.dll,它有一个导出的函数 void TestFunction();
 
procedure RunFunctionByName(const FunctionName: string);
var
  DLLHandle: THandle;
  FunctionPtr: Pointer;
begin
  DLLHandle := LoadLibrary('DLLTest.dll');
  if DLLHandle <> 0 then
  begin
    FunctionPtr := GetProcAddress(DLLHandle, PChar(FunctionName));
    if Assigned(FunctionPtr) then
    begin
      // 这里我们把 FunctionPtr 转换为无参数无返回值的函数指针
      // 如果你的函数有参数或返回值,请使用适当的函数指针类型
      TProcedure(FunctionPtr)();
    end
    else
      raise Exception.CreateFmt('函数 %s 未找到。', [FunctionName]);
    FreeLibrary(DLLHandle);
  end
  else
    raise Exception.Create('无法加载动态库。');
end;
 
begin
  try
    // 假设我们要调用的函数名为 'TestFunction'
    RunFunctionByName('TestFunction');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.


 

在这个例子中,我们首先加载了名为 DLLTest.dll 的动态链接库。然后,我们使用 GetProcAddress 函数来获取函数的地址,并根据函数名称调用它。注意,你需要确保你传递的函数名与DLL中导出的函数名完全匹配,包括大小写。

请确保你的DLL是可以被调用的,并且你有正确的调用约定。如果函数需要参数或者返回值,你需要使用正确的函数指针类型,例如 TFunction 或 TMethod

提示:AI自动生成,仅供参考

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享