现有需要,在操作系统中建立唯一的一个 Automation Object 实例,冥思苦想、埋头苦干7天毫无进展,总是 CreateObject 了,又无法控制其 Release,已吐血数升。现请求各位大侠帮忙,感谢感谢。

解决方案 »

  1.   

    To eastliangliang(青苹果):我也正是这么做,可是 Com 对象的 Release 取决于客户端,而不是我的程序。所以当没有客户端连接的时候,com 就自动 Release 了!注意,是自动 Release!我无法控制啊!
      

  2.   

    把你的 Com 嵌套到另外一个 Com 里去,让 客户端连接 第2 个com , 
    第2 个com  再创建第1个com 
      

  3.   

    我给你提一种方案:你这个需要的东西可以划分为两部分。
    1,内核部分,做成WINDOWS SERVICE,以系统用户方式运行,用SOCKET方式提供功能。
    2,COM部分,将功能请求用SOCKET转发给内核部分。。
      

  4.   

    To real_name(*真名):
        我第一次就是这么做的,可是没用,com 只对进程空间有效,到另外一个进程,便会创建一个新的 com 实例。To halfdream(哈欠):
        老兄……真不知道该怎么评价你的方案……既然能做 socket,为什么不干脆搞个 webservice 算了?能不通过网络,就在本机上实现单一实例的目标吗?
      

  5.   

    要这样啊。
    这个全局唯一的东西一定要做成COM的吗?换个实现方法怎么样,别一棵树上吊死。
      

  6.   

    1,WINDOWS对COM支持的平台不直接支持这样做。这同跨进程COM或DCOM底层的机制有些关系,
    它们要受进程安全管理。。每个进程都是属于特定用户的,ADMINISTRATOR用户不会访问到
    SYSTEM用户启动的COM。。不过仍然有一些办法。。2,楼主做全局唯一的目的是有东西需共享状态,事实上,并不等于整个COM实例需要共享。。3,做成COM的目的之一应该是让客户端容易用简单而统一的方式调用。系统级的服务很多是用
    SOCKET,管道等方式提供,使用COM封装实现协议透明化。4,那种方案不是我创的,微软早就这样做了。
      

  7.   

    楼主,
    其实说了这么多,解决问题在一个关键:绕开RPC,不管具体你用哪种方法。
    楼主做COM的时候也可以自定义marshaling,那时候多半也要用上SOCKET。
      

  8.   

    >>2,楼主做全局唯一的目的是有东西需共享状态,事实上,并不等于整个COM实例需要共享。。这个解决思路最好