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

4

如何在Delphi7中访问C# .net托管DLL?

我正在尝试访问一些编译为C#的DLL,它们不是那种旧式的DLL(我没有这些DLL的源代码)。

我已经尝试在网上搜索了,但是结果很混乱。我猜想即使使用D7访问它也存在某些限制。

谢谢。


C# .net 管理的 DLL 设置为 COM 可访问吗? - Erin
5个回答

5

@AngryHacker,如果你所建议的是正确的,那么.NET程序集需要使用ComVisibleAttribute进行标记(启用"注册COM互操作"选项),并使用[ComVisible(true)]将每个函数公开给COM。

如果您要使用第三方程序集(您未编写),则必须与供应商确认该程序集是否可以通过COM使用。

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

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


1

Delphi7可以像其他基于COM的语言(如VB6)一样访问托管DLL。

基本步骤如下:

  1. 确保你的.NET程序已经强命名。
  2. 通过regasm运行它。
  3. 将其放入GAC中。

现在,Delphi7应该能够像任何其他基于COM的DLL一样引用由regasm生成的TLB文件。


1
你可以尝试使用"Inverse P/Invoke" trick,就像Brian Long很久以前描述的那样。
这个技巧不需要ComVisible(所以你应该能够在不改变.NET程序集源代码的情况下使用它)。
--jeroen

1

这并不难。 如果您不想要,您不必“regasm”它。您甚至不必注册任何COM相关的东西。

最好使用C#或其他托管语言创建包装器。 哦,确保您的类是ComVisible(true)的。 这个Stack Overflow线程很好地总结了它,并提供了不同场景的示例。 在Delphi中托管CLR与/无JCL - 示例


0

如果您没有更改原始DLL源代码的能力,您可以在C#或Prism中编写代理,公开一个COM接口,您可以在项目中使用它。这种方法的优点是您可以定制每个调用,仅使用您可以轻松处理的特定类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接