在 delphi 7 中调用 C# .Net DLL

Call C# .Net DLL in delphi 7

任何人都知道如何创建一个可以在 Delphi 7 程序中调用的 C# dll? 我通过 ComVisibleAttribute 执行此操作,但 delphi 程序出错。

C# DLL 代码(Class 库项目):

namespace MyTest
{
        [ComVisible(true)]
        [GuidAttribute("EF00685F-1C14-4D05-9EFA-538B3137D86C")]
        [ClassInterface(ClassInterfaceType.None)]
        public class MainTest
        {
                public int AddP(int value)
                {
                   return value + 314;
                } 
        }
}

Delphi 7 主程序代码:

function AddP(Value: integer): integer; stdcall;
  external 'DelphiTest.dll';

procedure TfrmMain.btnConvertClick(Sender: TObject);
var value : double;
Begin
      Text := IntToStr(AddP(10000));
End;

出现错误:

The application was unable to start correctly (0xc000007b). Click OK to close the application.

我的回答不是关于Delphi,而是关于一般的事情。没有确切的解决方案,只有链接。基本上,您有几个选项可以从非托管调用托管代码:

创建 COM 对象。 您使用 COM 相关属性创建 c# dll 和 class MainTest。然后你在系统中注册你的dll(使用regasm.exe)。因此,您的 Com 对象可以从任何语言使用,包括 Delphi。查看 this post 了解更多信息

使用托管 c++ (c++/cli) 制作包装器 这也是一种非常流行的技术。问题是 c++/cli dll 可以混合托管和非托管代码。因此,您基本上是为托管代码创建非托管包装器。查看 this post 了解更多信息

使用 IL hack。该工具仅适用于静态方法,而且它更像是一种 hack,因为您需要更改 IL 代码。 This post 描述了它

所以您基本上是在尝试混合第一种和第三种方法。你需要坚持一个。我个人更喜欢第二种方法,因为它易于部署且使用安全