2010-04-02 92 views
4

如何使用delphi7访问C#.net托管的dll?使用Delphi 7访问托管代码(CLR)DLL

我想访问一些在C#中编译的DLL,它们不是那些旧式的DLL。 (我没有这些DLL的来源)

我曾尝试在线搜索,但他们很混乱。我想有一些限制,即使得到访问它与D7 ..

谢谢。

+0

C#.net托管的dll设置是否可以访问? – Erin 2010-04-02 21:26:22

回答

5

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

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

此外,程序集并不需要强大的名字才能通过COM访问。

如果你不想去的COM方式,检查出的串音德尔福: http://www.atozed.com/CrossTalk/Docs/index.EN.aspx

1

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

基本钻是这样的:

  1. 确保您的.NET是强命名。
  2. 运行它通过regasm
  3. 拖放到GAC

现在Delphi7中应该能够引用被regasm,因为这将任何其他基于COM的DLL生成的TLB文件。

1

你可以尝试使用"Inverse P/Invoke" trick作为一个很久以前Brian Long描述。

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

--jeroen

0

如果你没有改变原来的DLL源的能力,你可以写在C#或棱镜代理暴露,你可以在你的项目中使用的COM接口。这种方法的优点是您可以调整每个调用以使用您可以轻松处理的特定类型。

1

这并不难。 如果你不想要,你不必“重新注册”它。你甚至不需要注册任何COM-ISH。

您最好通过在C#或其他托管语言中创建包装来提供服务。 哦,并确保你的类是ComVisible(true)。 这个堆栈溢出线程对它进行了很好的总结,它为不同场景提供了一组示例。 Hosting CLR in Delphi with/without JCL - example