【问题标题】:Delphi DLL Case SensitivityDelphi DLL 区分大小写
【发布时间】:2016-05-06 21:07:40
【问题描述】:

我正在用 delphi XE8 编写一个 dll,供用 Delphi XE8 编写的应用程序使用。

我的 DLL 看起来像这样。

  function GetInt : Integer; stdcall;
  begin
    Result := 300;
  end;
  exports GetInt;

我的应用看起来像这样。

dllHandle := LoadLibrary(PChar('myDLL.dll'));
  ShowMessage(SysErrorMessage(GetLastError));
  if dllHandle <> 0 then
  begin
    @GetInt := GetProcAddress(dllHandle, 'GetInt');
    ShowMessage(SysErrorMessage(GetLastError));
    if Assigned(GetInt) then
      ShowMessage(IntToStr(GetInt))
    else
      ShowMessage('Nope');
    end;

我收到“找不到指定的过程”错误。因此,我将 export 语句和 @GetInt 语句从“GetInt”更改为“getInt”。现在一切都很好。

所以现在我的问题是:为什么我的 dll 函数和导出需要是同一个词,但区分大小写?

【问题讨论】:

  • GetProcAddress 确实区分大小写。您的代码看起来正确。我建议您检查图像的导出目录(例如tdump)
  • 无法使用提供的代码重现。
  • 这绝不是一个好兆头。
  • 我正在使用 Delphi XE8。

标签: delphi dll


【解决方案1】:

Windows DLL 导出的符号名称区分大小写。您提供的代码与您描述的不一样。您的实际代码的字母大小写不匹配。

几乎可以肯定,您正在加载一个过时的 DLL。

【讨论】:

  • 对。当我的库具有该功能并且与我的应用程序匹配的导出没有获得该功能时。当我故意添加大小写不匹配时,我的应用程序会加载函数(我更改应用程序以反映 dll 导出语句)
  • 这不是真的。您报告的内容不正确。我猜你正在加载一个过时的 DLL。
  • 谢谢!这就是正在发生的事情。
猜你喜欢
  • 1970-01-01
  • 2012-12-01
  • 2013-03-06
  • 2020-02-18
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多