【问题标题】:Use a C# interface in C++ or use a C++ interface in C#在 C++ 中使用 C# 接口或在 C# 中使用 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 你的第一个链接真的很有帮助!

标签: c# c++ interface clr


【解决方案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);
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2013-01-21
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多