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

Posted

技术标签:

【中文标题】在 C++ 中使用 C# 接口或在 C# 中使用 C++ 接口【英文标题】:Use a C# interface in C++ or use a C++ interface in C# 【发布时间】:2012-08-10 09:12:43 【问题描述】:

我正在开发一个解决方案,其中我有一个 C++ 解决方案和 C# 解决方案必须使用的接口。 我想知道:

实现这一点的最佳方法是:

我在 C++ 项目中使用的 C# 接口 我将在我的 C# 项目中使用的 C++ 接口

你能告诉我我应该如何进行以获得最佳解决方案吗?

【问题讨论】:

你看过 C++ .Net。您可以创建一个 .Net 接口并用 C++、C# VB.Net 或任何其他 .Net 语言实现它。 您还可以查看 COM 类型库来定义您的接口并以任何 COM 兼容语言实现它们。 参考this链接和this帖子。 @Jaguar 你的第一个链接真的很有帮助! 【参考方案1】:

您是指托管 c++ 吗?

在托管 c++ 的情况下,这很容易做到,只需将接口放在单独的项目(dll)中并从 c# 中引用它

如果你想对非托管 c++ 做同样的事情,事情就会变得困难

你需要使用COM,PInvoke 或某种服务/套接字通信

希望对你有帮助

【讨论】:

我正在使用托管 C++。所以我创建了一个 C# 接口,并在我的 C++ 项目中引用了它。当我实现我的界面时,我必须在我的方法之前加上关键字“virtual”,一切似乎都运行良好!谢谢!【参考方案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);

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

【讨论】:

以上是关于在 C++ 中使用 C# 接口或在 C# 中使用 C++ 接口的主要内容,如果未能解决你的问题,请参考以下文章

创建要在 C# 中使用的托管 C++ 接口

如何使用 Visual Studio Express 2013 将 C# 接口实现/合并到一个简单的 C++ 程序中

创建 C++ Dll,并从 C# 调用它

如何使用原生 C++ 的 COM 实现 C# 的接口?

使用 COM 互操作从非托管 C++ 访问 c# 属性

C# Interface的使用方法探讨