delphi7如何访问C#.net托管的dll?
我正在尝试访问一些用c#编译的DLL,它们不是那些旧式DLL。 (我没有这些DLL的来源)
我确实试图在网上搜索,但他们很困惑。我猜即使用D7进行访问也存在一些限制。
感谢。
答案 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。
基本训练是:
现在,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接口。这种方法的优点是你可以定制每个调用,只使用你可以轻松处理的特定类型。