我总觉得如果一个客户程序申请一个COM对象时,系统好像不会去检测当前是否有这样的一个exe文件正在运行,而是直接的再在后台启动一个新的exe程序,由该进程来提供COM对象的服务。
那位大侠解答一下,多谢了!!
9 个解决方案
#1
可行
注册类厂的时候用上REGCLS_MULTIPLEUSE,在你的类中用上DECLARE_CLASSFACTORY_SINGLETON
基本上就达到你的要求了
注册类厂的时候用上REGCLS_MULTIPLEUSE,在你的类中用上DECLARE_CLASSFACTORY_SINGLETON
基本上就达到你的要求了
#2
但是这样具体的机制如何呢?我是说,如果我希望我得这个程序一边还能继续相应用户的操作,而另
一面希望继续提供COM服务,是不是需要实现两个线程?
一面希望继续提供COM服务,是不是需要实现两个线程?
#3
我也有问题!
我按潘爱民翻译的那本《COM技术内幕-微软组件对象模型》第十章在VC6.0下做进程外服务程序,做好IDL文件,然后用MIDl编译生成代理/存根的C文件,然后编译这些代理/存根文件时过不去,提示错误如下:
proxy.def : error LNK2001: unresolved external symbol DllRegisterServer
proxy.def : error LNK2001: unresolved external symbol DllUnregisterServer
Debug/Proxy.lib : fatal error LNK1120: 2 unresolved externals
LINK : fatal error LNK1141: failure during build of exports file
应该是说没有引出自注册和卸载的函数。
我按潘爱民翻译的那本《COM技术内幕-微软组件对象模型》第十章在VC6.0下做进程外服务程序,做好IDL文件,然后用MIDl编译生成代理/存根的C文件,然后编译这些代理/存根文件时过不去,提示错误如下:
proxy.def : error LNK2001: unresolved external symbol DllRegisterServer
proxy.def : error LNK2001: unresolved external symbol DllUnregisterServer
Debug/Proxy.lib : fatal error LNK1120: 2 unresolved externals
LINK : fatal error LNK1141: failure during build of exports file
应该是说没有引出自注册和卸载的函数。
#4
如果你的COM服务和EXE自身的功能是并行的,则COM服务应在一个新的线程中创建,也就是说,需要在一个新的线程中使用CoRegisterClassObjects或_Module.RegisterClassObjects(ATL中)注册你的类对象
#5
还有一个问题请教一下,对于exe这样的COM,它的那个STUB是怎么样工作的。我是说,当Proxy向
stub通信的时候(比如LPC),STUB是怎样收到这个消息的,又是怎样去调用exe中的COM的呢?
谢谢!!
stub通信的时候(比如LPC),STUB是怎样收到这个消息的,又是怎样去调用exe中的COM的呢?
谢谢!!
#6
这是网络协议的具体细节,不用关系.
#7
但是stub如何调用真正的COM呢?我看到的文档好像说COM库中隐式定义了一个窗口,从而在窗口
函数中处理各个COM的请求。
函数中处理各个COM的请求。
#8
你看的那是STA的线程处理机制,CoInitialize函数会创建一个隐式的主窗口用来同步处理任务。
具体的RPC通讯细节我也不知道,我想也没必要知道吧。COM(OR)一般使用135端口(TCP或UDP)监听远程RPC激活请求,当代理和存根建立连接后怎么搞就不清楚了(应该情况只会更简单)。
具体的RPC通讯细节我也不知道,我想也没必要知道吧。COM(OR)一般使用135端口(TCP或UDP)监听远程RPC激活请求,当代理和存根建立连接后怎么搞就不清楚了(应该情况只会更简单)。
#9
实际上我就是想高清楚LPC的大概流程,因为我很奇怪的就是,写exe形式的COM的时候,连
在程序里面加载STUB这个dll都不需要,估计是COM库完成了这个工作把。那么我只要调用
CoInitialize初试化一下,然后注册一下COM,然后就进入消息循环就可以了。呵呵,现
在发现COM这个东西设计的还是很替程序员着想的。
在程序里面加载STUB这个dll都不需要,估计是COM库完成了这个工作把。那么我只要调用
CoInitialize初试化一下,然后注册一下COM,然后就进入消息循环就可以了。呵呵,现
在发现COM这个东西设计的还是很替程序员着想的。
#1
可行
注册类厂的时候用上REGCLS_MULTIPLEUSE,在你的类中用上DECLARE_CLASSFACTORY_SINGLETON
基本上就达到你的要求了
注册类厂的时候用上REGCLS_MULTIPLEUSE,在你的类中用上DECLARE_CLASSFACTORY_SINGLETON
基本上就达到你的要求了
#2
但是这样具体的机制如何呢?我是说,如果我希望我得这个程序一边还能继续相应用户的操作,而另
一面希望继续提供COM服务,是不是需要实现两个线程?
一面希望继续提供COM服务,是不是需要实现两个线程?
#3
我也有问题!
我按潘爱民翻译的那本《COM技术内幕-微软组件对象模型》第十章在VC6.0下做进程外服务程序,做好IDL文件,然后用MIDl编译生成代理/存根的C文件,然后编译这些代理/存根文件时过不去,提示错误如下:
proxy.def : error LNK2001: unresolved external symbol DllRegisterServer
proxy.def : error LNK2001: unresolved external symbol DllUnregisterServer
Debug/Proxy.lib : fatal error LNK1120: 2 unresolved externals
LINK : fatal error LNK1141: failure during build of exports file
应该是说没有引出自注册和卸载的函数。
我按潘爱民翻译的那本《COM技术内幕-微软组件对象模型》第十章在VC6.0下做进程外服务程序,做好IDL文件,然后用MIDl编译生成代理/存根的C文件,然后编译这些代理/存根文件时过不去,提示错误如下:
proxy.def : error LNK2001: unresolved external symbol DllRegisterServer
proxy.def : error LNK2001: unresolved external symbol DllUnregisterServer
Debug/Proxy.lib : fatal error LNK1120: 2 unresolved externals
LINK : fatal error LNK1141: failure during build of exports file
应该是说没有引出自注册和卸载的函数。
#4
如果你的COM服务和EXE自身的功能是并行的,则COM服务应在一个新的线程中创建,也就是说,需要在一个新的线程中使用CoRegisterClassObjects或_Module.RegisterClassObjects(ATL中)注册你的类对象
#5
还有一个问题请教一下,对于exe这样的COM,它的那个STUB是怎么样工作的。我是说,当Proxy向
stub通信的时候(比如LPC),STUB是怎样收到这个消息的,又是怎样去调用exe中的COM的呢?
谢谢!!
stub通信的时候(比如LPC),STUB是怎样收到这个消息的,又是怎样去调用exe中的COM的呢?
谢谢!!
#6
这是网络协议的具体细节,不用关系.
#7
但是stub如何调用真正的COM呢?我看到的文档好像说COM库中隐式定义了一个窗口,从而在窗口
函数中处理各个COM的请求。
函数中处理各个COM的请求。
#8
你看的那是STA的线程处理机制,CoInitialize函数会创建一个隐式的主窗口用来同步处理任务。
具体的RPC通讯细节我也不知道,我想也没必要知道吧。COM(OR)一般使用135端口(TCP或UDP)监听远程RPC激活请求,当代理和存根建立连接后怎么搞就不清楚了(应该情况只会更简单)。
具体的RPC通讯细节我也不知道,我想也没必要知道吧。COM(OR)一般使用135端口(TCP或UDP)监听远程RPC激活请求,当代理和存根建立连接后怎么搞就不清楚了(应该情况只会更简单)。
#9
实际上我就是想高清楚LPC的大概流程,因为我很奇怪的就是,写exe形式的COM的时候,连
在程序里面加载STUB这个dll都不需要,估计是COM库完成了这个工作把。那么我只要调用
CoInitialize初试化一下,然后注册一下COM,然后就进入消息循环就可以了。呵呵,现
在发现COM这个东西设计的还是很替程序员着想的。
在程序里面加载STUB这个dll都不需要,估计是COM库完成了这个工作把。那么我只要调用
CoInitialize初试化一下,然后注册一下COM,然后就进入消息循环就可以了。呵呵,现
在发现COM这个东西设计的还是很替程序员着想的。