在 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 描述了它
所以您基本上是在尝试混合第一种和第三种方法。你需要坚持一个。我个人更喜欢第二种方法,因为它易于部署且使用安全
任何人都知道如何创建一个可以在 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 描述了它
所以您基本上是在尝试混合第一种和第三种方法。你需要坚持一个。我个人更喜欢第二种方法,因为它易于部署且使用安全