2010-03-03 63 views
8

這是關於Window COM組件的。如何使用不帶tlb文件的進程外COM服務器

  • SERVER.EXE:一個32位外的過程COM服務器
  • CLSID_Application:它們使用SERVER.EXE 64位客戶端應用程序:在SERVER.EXE一個COM對象
  • Client.exe的GUID以無註冊表的方式。

我們知道,一個exe不能用來作爲一個免費的註冊表,COM組件,以模仿這樣的行爲,我開始SERVER.EXE過程中自己提供的準確路徑:

  • 的CreateProcess( 「SERVER.EXE」)
  • 的IClassFactory * pFactory = CoGetClassObject(CLSID_Application)
  • pFactory->的CreateInstance(ppAppObject);

它的工作原理,如果我有Server.tlb registred,但註銷後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

回答

3

是在<comInterfaceExternalProxyStub>元素足夠的,它真的有用?你不需要<comClass><typelib>元素嗎?

+0

我已經試過,這是行不通的。和可以在一個標籤使用,但只能在我的情況下,可執行文件是exe文件,它不會被註冊免費COM支持 – 2010-03-03 08:32:10

相關問題