创建要在 C# 中使用的托管 C++ 接口
Posted
技术标签:
【中文标题】创建要在 C# 中使用的托管 C++ 接口【英文标题】:Creating a Managed C++ interface to use in C# 【发布时间】:2015-05-21 22:56:49 【问题描述】:我们有一组原生 C++ 业务规则,它们封装在 C++/CLI 中,然后由 C# 层封装,因此我们可以通过 DCOM 公开它。
Native C++ 业务规则位于 DLL 中,并且可以在 COM 可见 DLL 中的 C++/CLI 中轻松调用。然后我们将此 DLL 添加为对 C# 项目的引用。
C# 层有很多派生自 ServicedComponent 的类,我们应用 regsvcs 将其注册为 DCOM 服务器。
但是,C++/CLI 层需要与 C# 层进行通信。为此,我正在考虑使用 C# 风格的界面。 C# 层将从接口派生,并将其传递给 C++/CLI 层,然后 C++/CLI 层可以调用其上的方法以在 C# 层中发生某些事情。这个接口需要在 C++/CLI 层中声明,但为了可见性。这是我的问题,我似乎无法做到这一点。
有没有办法在 C++/CLI 中声明一个 C# 风格的接口,然后在 C# 中使用它?
【问题讨论】:
"Managed C++" 指的是带有托管扩展的 Visual C++,就像在 Visual Studio .NET 2003 中一样。您可能指的是它的后续 C++/CLI。如果是这样,请改写并更改标签。 已按建议更改。 【参考方案1】:有(https://msdn.microsoft.com/en-us/library/737cydt1.aspx):
#pragma managed
using namespace System;
public interface class MyInterface
void MyFunction();
并在C#中使用:
public class MyClass : MyInterface
public void MyFunction()
【讨论】:
如果我这样声明,我就明白了。错误 CS0246:找不到类型或命名空间名称“MyInterface”(您是否缺少 using 指令或程序集引用?) 顺便说一句,汇编和使用语句在那里。如果我从派生 MyInterface 的类中删除方法 MyFunction,我会收到 Intellisense 错误“未实现接口成员 xxx” 我编辑答案以准确显示我编译的内容而没有错误。我正在使用 VS2013。 好的,但是如何在 C# 程序集中使用 C++/CLI 接口而不会出错。由于某种原因,我收到错误。 你需要一个类来实现接口。以上是关于创建要在 C# 中使用的托管 C++ 接口的主要内容,如果未能解决你的问题,请参考以下文章