2011-03-25 55 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