2011-03-25 64 views
2

通信我有以下問題:本地C++埃克用C#庫

  1. 埃克(本地C++)實現接口Ia和Ib。
  2. Dll1(native C++)有一個模板類D<T>,它實現接口Ic並調用到3.exe的Ia和Ib的實現。
  3. DLL2(原生C++)實現了E類(E類:公共D<E>

在運行時有發生如下:埃克加載DLL 2(多個實例)和實例Ë爲它提供指向其Ia和Ib指針。 exe從Dll2獲取Ic指針。

現在,我必須允許在C#中實現Dll2(s),以便Exe可以調用到Dll2的Ic impl中。和Dll2 cann回叫Exe的Ia和Ib I-faces。每當新的Dll2實現彈出時,我不必重新編譯Exe和Dll1。

是否可以實現這樣的事情?

+1

說什麼?您的描述很難遵循。擺脫所有縮寫 – jgauffin 2011-03-25 11:24:22

+1

我建議聽取David Heffernan有關整個dll類繼承的脆弱性的建議。在這種情況下保持二進制兼容性會很乏味。 – 2011-03-25 12:31:21

+0

Tnx Coda ...二進制兼容性是一個真正的問題,我會面對......我想我會盡量簡化這個問題,從C++/CLI消費C#接口,反之亦然,而不是使用COM封裝。任何人都可以給我一些提示,我可以如何從C++/CLI動態地使用C#接口(例如:加載C#DLL,查詢I-face並調用它),W-out COM? – Alex 2011-03-25 13:51:25

回答

5

我認爲你將不得不擺脫繼承,當跨模塊邊界應用已經是一個相當脆弱的工具。

我會告訴你COM。託管代碼可以將它們的接口公開爲COM對象,並且C++可以使用它們。反之亦然。

+0

Tnx David ...我會試試看。 – Alex 2011-03-25 12:52:18