从 Delphi 调用 .NET DLL

Call .NET DLL from Delphi

这是我第一次作为学生员工编程,我必须在 C#.NET 中创建一个 DLL,它可以从 Delphi 调用。

我读到这并不容易,因为 Delphi 是本机代码并且 .NET 被管理。

我还从 Robert Giesecke 那里了解到 'Unmanaged Exports'。这可能是解决方案吗?

因为我的机器上没有 Delphi(Delphi 不是免费的),我无法自己测试。

此外,当我实施非托管导出时,我的数据类型会不会有问题?

最后但并非最不重要的一点是,有没有一种我可以使用的语言在加载 DLL 时会遇到与 Delphi 相同的问题?能测试一下就好了

UnmanagedExports 是一种选择。它当然工作得很好。其他选项包括:

  • 使用 COM 公开功能。
  • 通过 C++/CLI 混合模式程序集公开功能。
  • 从您的 Delphi 代码托管 CLR。​​

最后一个选项不是很容易处理。不要试图那样做。

除非您已经是该领域的专家,否则您几乎肯定会遇到互操作数据类型的问题。

您当然可以使用 FreePascal 对此进行测试。很可能您可以在 FreePascal 中编写使用您的 .net 程序集的代码,然后在 Delphi 中使用完全相同的代码。即使您必须对其进行一些更改,您将学到的课程也将完全相同。

您可以使您的 .Net DLL 作为 Com 可见。检查 this link.

Delphi 可以毫无问题地加载 Com 对象。这在理论上,我没有具体的代码示例,但您可以尝试使用不同的教程,它们实际上解释了相同的内容。

我不知道数据类型,但 COM 总是尝试转换为基本类型(双精度、浮点数到十进制、数字到整数以及复杂对象到动态对象)。

您可以在 http://dotnetruntimelibraryfordelphi.sourceforge.net/

中使用 Delphi 的 .Net 运行时库

运行时库允许您托管和访问 .net 库类型。