如何将c类公开为com对象接口
how to expose a c# class as a com objects interface?
我有一个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++客户端代码中启动。
---edit---我可以用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方式。
相关文章:
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- 从 WinRT C++组件访问 COM 对象
- 通过 COM 对象连接 x64 应用程序时出现问题
- 我如何知道COM对象与不同的COM UUIDS兼容
- 如何访问从 COM 对象返回的 VARIANT 数据类型中的安全数组C++?
- 2 个 COM 对象,并在另一个对象中使用其中一个对象的接口
- 尝试向 COM 对象添加另一个接口时出现静态强制转换错误 C2440
- 在没有共享 COM 对象的情况下使用 COM STA 或 MTA?
- 初始化com对象的问题
- UI自动化回调中com对象的所有权
- 从 COM 对象快速读取西里尔字母
- 如果从函数返回指向指针 COM 对象的指针,我是否需要 AddRef()?
- 使用 com 对象删除计划任务
- 如何使用OlesetClipboard将我的COM对象放置在剪贴板上时解决问题
- 在自定义源和 SmartTee 之间插入筛选器会泄漏 COM 对象
- COM 对象中的回调
- 如何在使用C++打开隐藏的 COM 对象时隐藏控制台窗口
- 将结构中的字节数组传递给 com 对象
- COM对象,并返回QVariant强制转换问题