使用Delphi 7访问托管代码(CLR)DLL

时间:2010-04-02 21:17:47

标签: c# .net delphi dll clr

delphi7如何访问C#.net托管的dll?

我正在尝试访问一些用c#编译的DLL,它们不是那些旧式DLL。 (我没有这些DLL的来源)

我确实试图在网上搜索,但他们很困惑。我猜即使用D7进行访问也存在一些限制。

感谢。

5 个答案:

答案 0 :(得分:5)

@AngryHacker,对于你的建议是真的,.NET程序集需要用ComVisibleAttribute(启用COM Interop选项注册)标记,并使用[ComVisible(true)]将每个函数公开给COM。

如果您尝试使用第三方程序集(您没有编写),则必须与供应商核实是否可以通过COM使用该程序集。

此外,程序集不需要强名称可以通过COM访问。

如果您不想使用COM方式,请查看CrossTalk for Delphi: http://www.atozed.com/CrossTalk/Docs/index.EN.aspx

答案 1 :(得分:1)

Delphi7以与任何其他基于COM的语言(例如VB6)相同的方式访问托管DLL。

基本训练是:

  1. 确保您的.NET名称很强。
  2. 通过regasm
  3. 运行
  4. 将其放入GAC
  5. 现在,Delphi7应该能够引用由regasm生成的TLB文件,就像引用任何其他基于COM的DLL一样。

答案 2 :(得分:1)

很久以前,您可以尝试使用"Inverse P/Invoke" trick所述的Brian Long

这个技巧不需要ComVisible(所以你应该能够在不改变.NET程序集源的情况下使用它)。

- 的Jeroen

答案 3 :(得分:1)

这一点都不难。 如果你不想,你不必“诅咒”它。你根本不需要注册任何COM-ish。

通过使用C#或其他托管语言创建包装器,您将获得最佳服务。 哦,确保你的课程是可见的(真实的)。 这个Stack Overflow线程很好地总结了它,并且它通过一组用于不同场景的示例来实现。 Hosting CLR in Delphi with/without JCL - example

答案 4 :(得分:0)

如果您无法更改原始DLL的源代码,则可以使用C#或Prism编写代理,以暴露可在项目中使用的com接口。这种方法的优点是你可以定制每个调用,只使用你可以轻松处理的特定类型。