在C++中使用C#接口或在C#中使用C++接口

6
我正在开发一个解决方案,其中有一个C#接口需要被C++解决方案和C#解决方案使用。 我想知道:
在以下两种方式之间,哪一种是最好的实现方法:
- 在C++项目中使用C#接口 - 在C#项目中使用C++接口
另外,您能告诉我如何为找到最佳方案进行操作吗?

2
你看过C++ .Net吗?你可以创建一个.Net接口并在C++、C#、VB.Net或任何其他.Net语言中实现它。 - Robert
1
您还可以查看COM类型库,以定义接口,并在任何支持COM的语言中实现它们。 - Robert
2
请参考此链接此帖子 - Jainendra
@Jaguar,你的第一个链接真的很有帮助! - darkheir
2个回答

5

你是指托管 C++ 吗?

如果是托管 C++,那么很容易做到,只需将接口放在单独的项目(dll)中,并从 C# 中引用它。

如果要使用非托管 C++ 做同样的事情,则会变得更加困难。

那么你需要使用 COMPInvoke 或某种服务/套接字通信。

希望这可以帮助到你。


1
我正在使用托管 C++。 因此,我创建了一个 C# 接口,并在我的 C++ 项目中引用它。 当我实现我的接口时,我不得不在我的方法前面加上关键字“virtual”,一切似乎都正常工作! 谢谢! - darkheir

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);
}

那并不是完整的,但希望能让您了解所涉及的内容和一些关键术语。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接