任何人都知道如何创建可以在Delphi 7程序中调用的C#dll? 我通过ComVisibleAttribute做到这一点,但是delphi程序会出错。
C#DLL代码(类库项目):
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;
需要错误:
应用程序无法正确启动(0xc000007b)。单击确定 关闭申请。
答案 0 :(得分:1)
我的答案不是关于德尔福,而是关于一般事情。没有确切的解决方案,只有链接基本上,您有几种方法可以从非托管中调用托管代码:
创建COM对象。使用与COM相关的属性MainTest
创建c#dll和类。然后在系统中注册您的dll(使用regasm.exe)。因此,您的Com-object可以从包括Delphi在内的任何语言中使用。查看this post以获取更多信息
使用托管c ++创建包装器(c ++ / cli)这也是一种非常流行的技术。问题是c ++ / cli dll可以混合托管和非托管代码。所以你基本上为托管代码创建了非托管包装器。查看this post以获取更多信息
使用IL hack 。此工具仅适用于静态方法,因为您需要更改IL代码,因此它更像是一个黑客。 This post描述了它
所以你基本上试图混合第一种和第三种方法。你需要坚持一个。我个人更喜欢第二种方法,因为它易于部署和使用安全