【发布时间】:2020-02-20 18:23:51
【问题描述】:
我在从 dll 调用函数时遇到问题,我已将函数声明如下:
Function LicenseIsActive(): boolean;
StdCall; external 'VaultManagerTest.dll';
我尝试更改调用约定方法,但没有成功。
dll中的函数:
public bool LicenseIsActive()
{
return License.Active;
}
运行调试器时的错误信息:
【问题讨论】:
-
DLL是如何编译的?是32位/64位吗?调用应用程序是 32 位还是 64 位?当不匹配时,我已经看到了该异常。
-
具有
bool返回类型的导出C++ 函数无论如何都会被破坏,因为bool是只有构建DLL 的C++ 编译器才知道的C++ 类型。 -
它看起来像一个方法,而不是一个常规的函数。在 C++ 中,您不会对函数使用 public 关键字。
-
这个问题被标记为 C++,但我没有在问题中看到任何 C++。这看起来像一个用 Delphi 创建并被 Delphi 调用的 DLL。
-
@MrClear 好的,知道这一点,我很遗憾地告诉您,您不能像使用常规 dll 一样使用 .NET 程序集。使用 .NET 程序集需要更多...请先搜索 SO,了解如何在常规 Win32/64 Delphi 应用程序中使用 .NET 程序集。