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

Bai*_*ang 8 com regfreecom out-of-process

它是关于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>
Run Code Online (Sandbox Code Playgroud)

你对此有什么想法吗?

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

Ant*_*nts 3

元素是否<comInterfaceExternalProxyStub>充足?您不需要<comClass><typelib>元素吗?