如果是进程外的COM,通常我们要为其自定义的接口实现Proxy/stub DLL。但我让我不解的是:如果我用ATL做一个进程外COM,要与不要Proxy/stub DLL怎么都能工作?

解决方案 »

  1.   

    你将客户端与COM(具体是一个DCOM)放到两台机器上试过了吗?
      

  2.   

    不可能,进程外组件必须要PROXY/STUB,他们可能是以单独的DLL形式存在,也可能合并到组件中.因为跨进程的通信是通过PROXY/STUB来实现的,不仅是进程,以上理论对于套间同样适用.
      

  3.   

    呵呵
    因为你用了标准的自动化代理存根dll
      

  4.   

    在创建进程外COM时,我没有勾选“将PROXY/STUB代码并入”。所以,让我很是不解。两台电脑的情况没有试过。
      

  5.   

    ole32.dll还是oleauto32.dll,记不清了
      

  6.   

    luohualiushui(落花流水): 
        那是不是说,如果我手工实现了PROXY/STUB DLL,那么就会使用我的PROXY/STUB DLL。如果我不实现(或者说不去理采PROXY/STUB DLL,当成普通进程内组件),那么是不是系统就会自动处理所有PROXY/STUB DLL细节,对于我来说是透明的?
      

  7.   

    如果你的接口是自动化兼容的话,编译器自动把oleauto32.dll作为这个接口的proxy/stub dll
      

  8.   

    luohualiushui(落花流水):    谢谢你!
        不过,我还有一个问题,如果我在实现组件时,我全部用双接口,那么我是不是根本就不必管 PROXY/STUB DLL 是否存在了。即使CLIENT和COM SERVER不在同一台电脑上?
      

  9.   

    接口关联Proxy/stub DLL是接口的一个性质。
    midl在编译idl文件时会检查接口的local属性,如果没有则关联Proxy/stub 代码。
    另外使用oleautomation或dual属性的接口会使用通用列集器,它是一个已有的COM Class,ClassID是...-000000000046(ole32.dll),在注册表的interface下的大多数接口的ProxyStubClsid32都是这个值。
      

  10.   

    是必需的。 特别是Dcom实际上是客户服务程序, 代理要负责2者的数据传递调度。