如何将c#类公开为com对象接口?
我有一个c级P2PLib如何将c#类公开为com对象接口?,c#,c++,com,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 Displ
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(...);
public int-portRecv=10101;
公共int端口发送=10102;
公共int多播端口=10103;
int memberNum=0;
字符串数据;
串时间;
列表成员列表=新列表();
公共成员();
公共无效启动(…);
公共无效连接(……);
公众假期(……);
无效添加(…);
无效删除(…);
<如何在C++与C++之间的互通信中创建这个类的服务器端代码?< /p>
这个例子展示了我们如何编写可以是一组方法的接口
<>但是我很困惑,我的变量,比如PoPoStand等,将如何在C++客户端代码中启动。
---编辑---我可以用com接口保存持久数据吗?例如,上述清单?我能否在与托管代码com对象通信的非托管代码中创建此类的对象?您不能在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;
}
公共类端口包装器{
公共int接收端口{
获取{return portRecv;}
集合{
if(value==portRecv)返回;
如果(值<256 | |值>65535)抛出新ArgumentOutOfRangeException();
portRecv=值;
设置接收器();
}
}
//等等。。
私有int端口RECV=10101;
}
在C#代码中实际声明一个接口,就可以进入这个成功的陷阱。这是一个全面的好主意,因为它允许您使用[ClassInterface(ClassInterfaceType.None)]隐藏实现类的详细信息,并使用[InterfaceType(ComInterfaceType.InterfaceAisDual)]公开纯接口。这是自然的COM方式。在纯C代码中,当我创建类P2PLib的对象时,该对象在内部保存一些数据,如客户端列表。当我只从我的C语言对象到我的未来C++代码时,我不能使用像我的C代码那样的持久数据吗?当然可以,它仍然是一个类对象。COM支持coclass,它甚至没有静态数据的概念。C++代码将必须使用属性获取方法来获取值,比如“代码> Obj-> GETYRealEvestPoT(和端口)< /C>。其他支持属性的语言将使您的属性看起来像一个字段,就像C#一样。