【问题标题】:Delphi calling a DLL functionDelphi调用DLL函数
【发布时间】: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 程序集。

标签: c# delphi


【解决方案1】:

您不能直接调用该函数(原因在 cmets 中说明),但这里有一个不使用 COM 接口的简单解决方法。

编写一个通过退出代码返回布尔值的 C# 可执行文件,如下所示:

using VaultManagerTest;

public class Test
{
   public static int Main()
   {
      return License.Active ? 1 : 0;
   }
}

在 Delphi 中,启动可执行文件,等待它完成并检查其退出代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2015-07-28
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多