【问题标题】:How to use an out-of-process COM server without its tlb file如何使用没有 tlb 文件的进程外 COM 服务器
【发布时间】:2011-01-23 01:47:11
【问题描述】:

关于Window COM组件。

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

众所周知,exe 不能用作免注册表的 COM 组件,为了模仿这种行为,我通过提供确切路径自己启动 Server.exe 进程:

  • CreateProcess("Server.exe")
  • IClassFactory* pFactory = CoGetClassObject(CLSID_Application)
  • pFactory->CreateInstance(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 中,它确实有效

【问题讨论】:

    标签: com regfreecom out-of-process


    【解决方案1】:

    &lt;comInterfaceExternalProxyStub&gt; 元素是否足够?难道你不需要&lt;comClass&gt;&lt;typelib&gt; 元素吗?

    【讨论】:

    • 我试过 ,但还是不行。 只能在 标记中使用,但在我的情况下,可执行文件是一个 exe,它不受无注册表 COM 的支持
    • @bay 如果它不能解决您的问题,您为什么接受这个答案?这不是 Stack Overflow 的预期工作方式。
    猜你喜欢
    • 2011-05-18
    • 2011-11-20
    • 2014-02-18
    • 1970-01-01
    • 2012-10-10
    • 2011-05-17
    • 2015-05-23
    • 2013-01-20
    • 2012-09-06
    相关资源
    最近更新 更多