DELPHI XE2 DLL 无法添加到 C# 应用程序中

本文关键字:应用程序 添加 XE2 DLL DELPHI | 更新日期: 2023-09-27 18:30:31

为了测试,我正在尝试在C#应用程序(在Visual C# 2010 Express中开发)中调用Delphi XE2 DLL(参见代码)。

procedure CLP; stdcall; export;
begin
  showmessage('TEST');
end;
exports CLP;

但是,当尝试将 DLL 添加为 C# 项目的引用时,将显示以下消息:

无法添加对"D:''temp''test.dll"的引用。请确保 该文件是可访问的,并且是有效的程序集或COM 元件。

当在Delphi 2010下编译相同的DLL时,它可以毫无问题地工作。

任何如何解决问题的建议将不胜感激。

DELPHI XE2 DLL 无法添加到 C# 应用程序中

不能

将非托管 DLL 添加到 .NET 项目中。

但是您可以导入函数,例如请参阅平台调用教程

您正在尝试链接到非托管的本机 DLL。不能将此类内容作为引用添加到托管应用程序中。

调用 DLL 的方法是使用 p/invoke:

[DllImport(@"test.dll", CallingConvention=CallingConvention.Stdcall)]
static extern void CLP();

当然,当您开始为 DLL 设置参数时,事情可能会变得更加复杂,但使用 p/invoke 可以走很长一段路。

需要注意的一点是,如果 DLL 为 32 位,则托管项目面向 x86,如果 DLL 为 64 位,则面向 x64。

最后,请注意,在现代德尔斐中使用export毫无意义。您应该简单地删除它,因为编译器无论如何都会忽略它。

Henk是对的,我想补充一些东西。

首先,仅当 dll 是 .NET 托管 dll(调用程序集)时,才能添加 dll。但是,您可以从非托管 dll 或 exe 文件导入未托管的函数。所以正确的问题是我如何从非托管 dll 导入函数,您应该寻找答案。我认为最好的起点是pinvoke网站。