跨进程的对象调用问题 有两个进程A和B,在进程A中创建并初始化了对象oTest(也就是说在进程A中对对象oTest作了许多设置工作),现在需要在进程B中获取进程A中的对象oTest,请问应该如何作? 各位大大请帮帮忙,有实例更好,我现在已经是焦头烂额了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以从进程b中发消息oTest对象的句柄可以发给进程b 青牛兄:oTest对象是在进程A中创建的,将它的句柄发给B的话,B能直接用吗?即使能用,但现在我的困境是A和B之间即不能用Socket通讯,也不能用Msg通讯。 哦,忘了说了,oTest对象是一个.Exe组件,它由进程A启动(进程A可以是一个Service),而进程B是一个VB写的应用程序。 楼上用的是 com吧,local process server。看interface里有没有方法可以调用。 谢谢jslisong(碧螺春): 我在VB中用了getobject(,ProgID),也在VC中用了getacitveobject,都没有办法获取A进程中的对象(在A进程中也对这个对象进行了RegisterActiveObject处理)。我现在怀疑是不是我的方法错了。 呵呵,忘了说了,我可是标准的菜鸟,看等级就知道了。受自身水平的限制,我在这个问题上已耗了一个多月,头发不但白了许多,还掉了不少,这样下去马上就会变成秃顶了。 可不可以让进程A也作为一个组件服务,用聚合或包容的方式提供对oTest的访问? zpplayer(): 进程A本身就是一个Service,完全可以提供,问题是进程B如何从进程A中去获取oTest?这方面我可是门外汉啊。 用名字对象看能否解决,就是说在进程A中创建并初始化oTest对象后创建一个在ROT中注册的名字对象,并将这个名字对象和oTest对象注册到ROT中。然后在进程B中通过名字对象拿到这个初始化过后的oTest对象。这只是我的一个思路,我也没这么做过,思路来源于CoGetInstanceFromFile的实现过程。呵呵,大家可以探讨探讨。 如前我所说的,如果进程A不是既定的service(就是说可以对其编码),那么可否考虑在这个进程中也提供一个组件对象,用这个对象来包容oTest的对象,假定这个对象为oTestProxy。那么进程B只需要创建一个oTestProxy对象,并且通过oTestProxy对象来访问oTest对象,当然oTestProxy调用的oTest对象是在进程A中创建并初始化过。 补充以下oTestProxy和oTest对象因该具有相同的接口,并且不光是可以包容来实现,还可以用聚合的方法,只需要在创建oTest后做初始化工作。 哦,这样不行,之所以存在这样的问题,主要是考虑到效率的问题,因为进程A是在进程B之前运行的,oTest的初始化工作可能用时比较长,如果进程B临时去创建,客户是受不了的,一旦A将oTest对象初始化完之后,进程B再去获取现成的oTest对象,那么进程B的效率将大大提高,且用户退出进程B后又再运行进程B时,oTest还可以被复用,也就是说oTest对象的初始化工作是不受进程B的运行次数的限制,在未退出进程A之前,它永远只被初始化一次。 那如搂主所说的情况,使用包容的方式更为合理。可以在进程A中将oTest对象创建为全局的对象,也就是说当进程A启动后就创建一个全局对象oTest并用较长的时间去初始化它。并且进程A提供的oTestProxy对象访问该全局对象为进程B中的客户提供服务,服务结束后oTestProxy对象将被释放,而oTest对象则会依然存在。若再有客户需要访问时还是可以通过创建一个新的oTestProxy对象来获得对oTest的访问。 而且,通过这种代理的方式可以避免oTest在为一个客户服务的同时又被另一个客户请求的可能,这些都可以在oTestProxy对象中轻松解决。 jslisong(碧螺春): 呵呵,恭喜你,一会不见就加了一星。 我正在看资料,以前主要看的是ole automation,但看着看着就看到了组件,我现在不知道是回头看ole automation好呢还是看组件技术好。 我听说word.application是用ole automation技术实现的,我要作的进程A或oTest对象中只要有一个实现了与word.application相似的功能就行了。 我始终认为ole automation能实现的,ATL模板写的com(或com+)也一定能实现。最大的问题是这两种方法我都不知道怎么去实现。 接收到串口摄像头JPEG图像代码,但不能显示出来 如何使editbox滚动条随着数据的增加而自动下滑 急!!谢了 关于ShellExecuteEx()的执行速度问题 vista 下用户快速切换的问题 怎样防止IPictur::Render盖住其他控件 请问那一个控件可以显示gif图片呢? 关于图形坐标单位的问题?帮忙呀。 MFC CTypedPtrList 转ATL对就哪个API 这一段时间要写一个Dos程序,谁能给我一个键盘中断的程序?一定给分! 谁能详细讲讲用彩图和掩图实现动画的原理和过程 坐标精度问题…… 怎样用VC判断Word文档是否被锁定?
oTest对象的句柄可以发给进程b
oTest对象是在进程A中创建的,将它的句柄发给B的话,B能直接用吗?即使能用,但现在我的困境是A和B之间即不能用Socket通讯,也不能用Msg通讯。
哦,忘了说了,oTest对象是一个.Exe组件,它由进程A启动(进程A可以是一个Service),而进程B是一个VB写的应用程序。
看interface里有没有方法可以调用。
我在VB中用了getobject(,ProgID),也在VC中用了getacitveobject,都没有办法获取A进程中的对象(在A进程中也对这个对象进行了RegisterActiveObject处理)。我现在怀疑是不是我的方法错了。
呵呵,忘了说了,我可是标准的菜鸟,看等级就知道了。受自身水平的限制,我在这个问题上已耗了一个多月,头发不但白了许多,还掉了不少,这样下去马上就会变成秃顶了。
进程A本身就是一个Service,完全可以提供,问题是进程B如何从进程A中去获取oTest?这方面我可是门外汉啊。
呵呵,恭喜你,一会不见就加了一星。
我正在看资料,以前主要看的是ole automation,但看着看着就看到了组件,我现在不知道是回头看ole automation好呢还是看组件技术好。
我听说word.application是用ole automation技术实现的,我要作的进程A或oTest对象中只要有一个实现了与word.application相似的功能就行了。
我始终认为ole automation能实现的,ATL模板写的com(或com+)也一定能实现。最大的问题是这两种方法我都不知道怎么去实现。