2012-08-10 164 views
4

我正在開發一個解決方案,其中有一個必須由C++解決方案和C#解決方案使用的接口。 我想知道:在C++中使用C#接口或在C#中使用C++接口

什麼是實現的最佳途徑此之間:

  • ,我在我的C++項目
  • C++接口,我將在使用使用C#接口我C#項目

你也可以指示我應該如何進行最佳解決方案嗎?

+1

你看過C++ .Net嗎?您可以創建一個.Net接口並使用C++,C#VB.Net或任何其他.Net語言實現它。 – Robert 2012-08-10 09:16:57

+0

您還可以查看COM類型庫來定義您的接口並使用任何COM兼容的語言來實現它們。 – Robert 2012-08-10 09:18:04

+1

請參考[this](http://www.switchonthecode.com/tutorials/implementing-csharp-interfaces-in-cplusplus)鏈接和[this](http://stackoverflow.com/questions/880984/implementing- an-interface-declared-in-c-sharp-from-c-cli)post。 – Jaguar 2012-08-10 09:19:36

回答

4

你的意思是託管C++?

在託管的C++而言這是很容易做到,在單獨的項目(DLL),只是把界面,如果你想要做同樣的從C#

事情變得困難引用它不是管理C++

比你需要使用COMPInvoke或某種服務/插座交際的

希望這有助於

+0

我正在使用託管C++。 所以我創建了一個C#接口,並在C++項目中引用它。 當我實現我的接口時,我不得不把我的方法之前的關鍵字「虛擬」,一切似乎工作正常! 謝謝! – darkheir 2012-08-10 09:20:27

2

我看到你最後的評論您正在使用託管C++,所以它是直接的,但我會留下這個答覆。

C#(建築COM類):

[Guid("69432320-04B6-3233-928F-FD8583232C880")] 
public interface MyInterface 
{ 
    [DispId(1)] 
    void Method1 (string name); 
} 

MyInterface myInterface = (MyInterface)new ConcreateClassImplementingInterface(); 

本地C++:

MIDL_INTERFACE("69432320-04B6-3233-928F-FD8583232C880") //note: same guid 
{ 
    public: 
    virtual Method1 (BSTR name); 
} 

這決不是完整的,但希望給你什麼參與一些關鍵術語的想法。