如何将c#类公开为com对象接口?

时间:2012-03-08 12:13:43

标签: 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 示例显示了我们如何编写可以成为方法组的接口

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

---编辑---我可以用com接口保存持久数据吗?例如上面提到的清单?我是否能够在与托管代码com对象进行通信的非托管代码中创建此类的对象?

1 个答案:

答案 0 :(得分:1)

您不能在COM接口中公​​开字段,只支持属性和方法。这在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#代码中实际声明一个接口来实现这一成功。一个全面的好主意,因为它允许您使用[ClassInterface(ClassInterfaceType.None)]隐藏实现类详细信息,并使用[InterfaceType(ComInterfaceType.InterfaceIsDual)]公开纯接口。这是COM的自然方式。