代码之家  ›  专栏  ›  技术社区  ›  Baiyan Huang

如何在没有TLB文件的情况下使用进程外COM服务器

  •  8
  • Baiyan Huang  · 技术社区  · 15 年前

    它是关于window com组件的。

    • server.exe:32位进程外COM服务器
    • clsid_application:server.exe中COM对象的GUID
    • client.exe:一个64位客户端应用程序,它以无注册表的方式使用server.exe。

    如我们所知,一个exe不能用作一个没有注册表的COM组件,为了模仿这种行为,我通过提供确切的路径来启动server.exe进程:

    • 创建进程(“server.exe”)
    • iclassFactory*pfactory=cogetClassObject(clsid_应用程序)
    • pfactory->创建实例(ppAppObject);

    如果我注册了server.tlb,它就会工作,但是在注销server.tlb之后,它就无法创建ppappobject,即使我将清单同时嵌入server.exe和client.exe:

    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <file name="Server.tlb">
      <typelib tlbid="{DAC4A4C9-F84C-4F05-A7DC-E152869499F5}" version="1.0" helpdir=""></typelib>
    </file>
    <comInterfaceExternalProxyStub name="IApplication" iid="{D74208EA-71C2-471D-8681-9760B8ECE599}" tlbid="{DAC4A4C9-F84C-4F05-A7DC-E152869499F5}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
    </assembly>
    

    你对此有什么想法吗?

    编辑: 事实证明,如果我为接口指定tlbid,并将清单嵌入到两个exe中,它确实可以工作。

    1 回复  |  直到 13 年前
        1
  •  3
  •   Ants    15 年前

    <comInterfaceExternalProxyStub> 元素是否足够?你不需要 <comClass> <typelib> 元素也是?