2010-04-02 54 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

相關問題