как выставить класс aС# как интерфейс COM-объектов?

У меня есть класс AС# 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++?

Пример http://msdn.microsoft.com/en-us/library/aa645738(v=vs.71).aspx показывает, как мы можем писать интерфейсы, которые могут быть группами методов

но я смущен тем, как мои переменные, такие как portsend и другие, будут инициированы в c++ клиентском коде.

--- edit --- Могу ли я сохранять постоянные данные с COM-интерфейсами? например, список, упомянутый выше? Смогу ли я создать объект этого класса в неуправляемом коде, взаимодействующем с объектом com-кодов управляемых кодов?

0
источник поделиться
1 ответ

Вы не можете выставлять поля в COM-интерфейсе, поддерживаются только свойства и методы. Это, как правило, хорошая и широко распространенная практика программирования на С#, также помогает здесь:

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;
}

Впасть в эту грань успеха, фактически объявив интерфейс в вашем коде С#. Обходная хорошая идея, поскольку позволяет скрыть сведения о классе реализации с помощью [ClassInterface (ClassInterfaceType.None)] и разоблачить чистый интерфейс с помощью [InterfaceType (ComInterfaceType.InterfaceIsDual)]. Это естественный COM-способ.

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос