在 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++ 接口的主要内容,如果未能解决你的问题,请参考以下文章