2012-08-10 80 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); 
} 

这决不是完整的,但希望给你什么参与一些关键术语的想法。