c# - 如何将 C# 类公开为 com 对象接口(interface)?

标签 c# c++ com

我有一个 C# 类 P2PLib。

 public int portRecv=10101;
    public int portSend = 10102;
    public int multicastPort=10103;
    int memberNum = 0;
    string data;
    string time;
    List<Member> MemberList = new List<Member>();
    public void DisplayMembers();
    public void start(...);
    public void join(..);
    public void leave(..);
    void add(...);
    void remove(...);

如何在 c# 和 c++ 之间的互操作通信中创建此类的服务器端代码?

http://msdn.microsoft.com/en-us/library/aa645738(v=vs.71).aspx 示例显示了我们如何编写可以是方法组的接口(interface)

但我很困惑,我的变量(如 portsend 和其他变量)将如何在 C++ 客户端代码中启动。

---编辑---我可以使用 com 接口(interface)保存持久数据吗?例如上面提到的列表?我能否在与托管代码 com 对象通信的非托管代码中创建此类的对象?

最佳答案

您不能在 COM 接口(interface)中公开字段,仅支持属性和方法。这通常是 C# 编程中广泛采用的良好实践,在这里也有帮助:

public class PortWrapper {
   public int ReceivePort {
      get { return portRecv; }
      set { 
         if (value == portRecv) return;
         if (value < 256 || value > 65535) throw new ArgumentOutOfRangeException();
         portRecv = value;
         setupReceiver();
      }
   }
   // etc..

   private int portRecv=10101;
}

通过在您的 C# 代码中实际声明一个接口(interface),掉进这个成功的陷阱。一个全面的好主意,因为它允许您使用 [ClassInterface(ClassInterfaceType.None)] 隐藏实现类的详细信息,并使用 [InterfaceType(ComInterfaceType.InterfaceIsDual)] 公开纯接口(interface)。这是自然的 COM 方式。

关于c# - 如何将 C# 类公开为 com 对象接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9617490/

相关文章:

c# - 合并相同类型的列表<T>

c++ - 如何为自定义文件格式构建过滤器处理程序,以便可以通过 Windows 搜索搜索其内容?

c++ - 无法打开 Windows GDI 打印机驱动程序

c# - 如何在不引用的情况下在 C# 中使用非托管 COM DLL

com - 如何获取 Windows SDK 中的资源 DLL 代码示例以编译和运行?

c# - 在 Metro 中,如何获取所有国家/地区的列表?

C# opc 客户端 .net api

C# MVC Controller 错误地解析来自 POST 的 JSON

c++ - 如何计算帧缓冲区间距?

c++ - Armadillo 中的 4 维矩阵