【问题标题】:Creating a Managed C++ interface to use in C#创建要在 C# 中使用的托管 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。如果是这样,请改写并更改标签。
  • 已按建议更改。

标签: c# .net com c++-cli dcom


【解决方案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 接口而不会出错。由于某种原因,我收到错误。
  • 你需要一个类来实现接口。
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
相关资源
最近更新 更多