[英]how to expose a c# class as a com objects interface?
我有AC#類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/zh-cn/library/aa645738(v=vs.71).aspx示例演示了如何編寫可作為方法組的接口
但是我對於如何在c ++客戶端代碼中啟動像portend這樣的變量和其他變量感到困惑。
---編輯---我可以使用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;
}
通過在您的C#代碼中聲明一個接口來落入成功的陷阱。 一個全面的好主意,因為它使您可以使用[ClassInterface(ClassInterfaceType.None)]隱藏實現類的詳細信息,並使用[InterfaceType(ComInterfaceType.InterfaceIsDual)]公開純接口。 那是自然的COM方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.