2009-08-14 40 views
0

我們正在使用一個現有的原生應用程序(很可能用VB編寫)加載程序集並使用「延遲綁定」調用方法。我們無法訪問其源代碼。C#實現本地代碼的後期綁定

我們希望在C#中實現這個接口,並讓原生應用程序調用我們的C#程序集。

這是可能的嗎?

這是我們除了匹配方法名稱和方法簽名以使其工作之外必須做的事情嗎?

+0

你在問如何從VB6應用程序動態加載和調用.NET程序集中的方法 - 對嗎? – 2009-08-14 16:00:16

+0

我想要實現一個VB6應用程序將加載並通過後期綁定運行的C#程序集。我知道要實現的方法簽名,但需要知道是否需要額外的C#才能正常工作。 (標記我的程序集ComVisible等) – jonathanpeppers 2009-08-14 16:02:38

+0

我更新了我的答案,並提供了一篇文章的鏈接,這篇文章應該讓你開始。 – 2009-08-14 21:50:05

回答

0

這些都是使所需的步驟,它的工作:

  1. 標記您的類[標記有ComVisible特性(真)],並確保一個獨特的[的Guid]屬性
  2. 彰顯PROGID把它送給你類通常是MyNamespace.MyClass,但你可以在你的類添加一個屬性來覆蓋這個問題,以及
  3. 將每個將被稱爲
  4. 編譯程序集和運行regasm.exe方法正確[DISPID]屬性在您的組裝

瞧!原生代碼可以通過「後期綁定」來調用您的C#。當然,我必須設置幾個註冊表項,以使我的本地應用程序知道如何加載我的程序集,但一切正常。

+0

那麼我的回答出了什麼問題,除了我沒有爲你一步一步闡明?我確實指出了你的相關文章,對吧? – 2009-08-15 14:43:51

+0

我的不是最好的答案嗎? – jonathanpeppers 2009-08-17 14:15:58

+0

但是你首先問了這個問題,所以大概你在那個時候沒有答案。信用的人通過提升和/或接受幫助你達成最終答案是正常的;通常情況下,你會得到一個完整的隨時可用的答案,虛線和Ts交叉在盤子上。當然,你可以填寫最後的細節並創建自己的答案並接受 - 你的答案將完全符合你的想法,所以在這個意義上「最好的」。但是在我看來,與Stack Overflow的精神相反,人們接受他們自己的答案。 – 2009-08-17 18:19:10

1

如果您試圖從VB6調用.NET代碼,最簡潔的方法是將C#代碼作爲COM對象顯示給VB6代碼 - 所以是的,您需要將C#代碼標記爲ComVisible確保它看起來像現有的COM接口。

更新:Here是一篇文章,讓你開始。

+0

我們正在使用已編寫的現有應用程序,但我們沒有源代碼。它使用後期綁定來打開特定名稱的對象並調用特定名稱的方法。我想知道如果這樣的對象可以在C#中實現,我希望VB可能無法以這種方式加載.Net對象。你知道術語「遲綁定」是指什麼嗎? – jonathanpeppers 2009-08-14 18:15:35

+0

當然,在COM世界中,後期綁定意味着IDispatch。您在問現有的COM接口是否可以使用C#實現,如果您仔細實施,答案會是肯定的。 – 2009-08-14 18:22:04

+0

有沒有好的文章解釋如何做到這一點? – jonathanpeppers 2009-08-14 19:36:10