有两个进程A和B,在进程A中创建并初始化了对象oTest(也就是说在进程A中对对象oTest作了许多设置工作),现在需要在进程B中获取进程A中的对象oTest,请问应该如何作?
   各位大大请帮帮忙,有实例更好,我现在已经是焦头烂额了!

解决方案 »

  1.   

    可以从进程b中发消息
    oTest对象的句柄可以发给进程b
      

  2.   

    青牛兄:
    oTest对象是在进程A中创建的,将它的句柄发给B的话,B能直接用吗?即使能用,但现在我的困境是A和B之间即不能用Socket通讯,也不能用Msg通讯。
       哦,忘了说了,oTest对象是一个.Exe组件,它由进程A启动(进程A可以是一个Service),而进程B是一个VB写的应用程序。
      

  3.   

    楼上用的是 com吧,local process server。
    看interface里有没有方法可以调用。
      

  4.   

    谢谢jslisong(碧螺春):
        我在VB中用了getobject(,ProgID),也在VC中用了getacitveobject,都没有办法获取A进程中的对象(在A进程中也对这个对象进行了RegisterActiveObject处理)。我现在怀疑是不是我的方法错了。
        呵呵,忘了说了,我可是标准的菜鸟,看等级就知道了。受自身水平的限制,我在这个问题上已耗了一个多月,头发不但白了许多,还掉了不少,这样下去马上就会变成秃顶了。
      

  5.   

    可不可以让进程A也作为一个组件服务,用聚合或包容的方式提供对oTest的访问?
      

  6.   

    zpplayer(): 
    进程A本身就是一个Service,完全可以提供,问题是进程B如何从进程A中去获取oTest?这方面我可是门外汉啊。
      

  7.   

    用名字对象看能否解决,就是说在进程A中创建并初始化oTest对象后创建一个在ROT中注册的名字对象,并将这个名字对象和oTest对象注册到ROT中。然后在进程B中通过名字对象拿到这个初始化过后的oTest对象。这只是我的一个思路,我也没这么做过,思路来源于CoGetInstanceFromFile的实现过程。呵呵,大家可以探讨探讨。
      

  8.   

    如前我所说的,如果进程A不是既定的service(就是说可以对其编码),那么可否考虑在这个进程中也提供一个组件对象,用这个对象来包容oTest的对象,假定这个对象为oTestProxy。那么进程B只需要创建一个oTestProxy对象,并且通过oTestProxy对象来访问oTest对象,当然oTestProxy调用的oTest对象是在进程A中创建并初始化过。
      

  9.   

    补充以下oTestProxy和oTest对象因该具有相同的接口,并且不光是可以包容来实现,还可以用聚合的方法,只需要在创建oTest后做初始化工作。
      

  10.   

    哦,这样不行,之所以存在这样的问题,主要是考虑到效率的问题,因为进程A是在进程B之前运行的,oTest的初始化工作可能用时比较长,如果进程B临时去创建,客户是受不了的,一旦A将oTest对象初始化完之后,进程B再去获取现成的oTest对象,那么进程B的效率将大大提高,且用户退出进程B后又再运行进程B时,oTest还可以被复用,也就是说oTest对象的初始化工作是不受进程B的运行次数的限制,在未退出进程A之前,它永远只被初始化一次。
      

  11.   

    那如搂主所说的情况,使用包容的方式更为合理。可以在进程A中将oTest对象创建为全局的对象,也就是说当进程A启动后就创建一个全局对象oTest并用较长的时间去初始化它。并且进程A提供的oTestProxy对象访问该全局对象为进程B中的客户提供服务,服务结束后oTestProxy对象将被释放,而oTest对象则会依然存在。若再有客户需要访问时还是可以通过创建一个新的oTestProxy对象来获得对oTest的访问。
      

  12.   

    而且,通过这种代理的方式可以避免oTest在为一个客户服务的同时又被另一个客户请求的可能,这些都可以在oTestProxy对象中轻松解决。
      

  13.   

    jslisong(碧螺春):
        呵呵,恭喜你,一会不见就加了一星。
        我正在看资料,以前主要看的是ole automation,但看着看着就看到了组件,我现在不知道是回头看ole automation好呢还是看组件技术好。
        我听说word.application是用ole automation技术实现的,我要作的进程A或oTest对象中只要有一个实现了与word.application相似的功能就行了。
        我始终认为ole automation能实现的,ATL模板写的com(或com+)也一定能实现。最大的问题是这两种方法我都不知道怎么去实现。