描述:
我想在一个exe文件内实现一个COM对象,一般情况下这个exe文件是一直运行着的,完成一些信息处理和用户交互的工作。当一个客户程序申请使用COM对象时,该程序提供这个COM对象的服务。不知道这样是否可行?
我总觉得如果一个客户程序申请一个COM对象时,系统好像不会去检测当前是否有这样的一个exe文件正在运行,而是直接的再在后台启动一个新的exe程序,由该进程来提供COM对象的服务。
那位大侠解答一下,多谢了!!
解决方案1:
你看的那是STA的线程处理机制,CoInitialize函数会创建一个隐式的主窗口用来同步处理任务。
具体的RPC通讯细节我也不知道,我想也没必要知道吧。COM(OR)一般使用135端口(TCP或UDP)监听远程RPC激活请求,当代理和存根建立连接后怎么搞就不清楚了(应该情况只会更简单)。
如果你的COM服务和EXE自身的功能是并行的,则COM服务应在一个新的线程中创建,也就是说,需要在一个新的线程中使用CoRegisterClassObjects或_Module.RegisterClassObjects(ATL中)注册你的类对象
解决方案3:这是网络协议的具体细节,不用关系.
解决方案4: 可行
注册类厂的时候用上REGCLS_MULTIPLEUSE,在你的类中用上DECLARE_CLASSFACTORY_SINGLETON
基本上就达到你的要求了