2010-03-03 7 views
8

Es geht um Window COM-Komponente.So verwenden Sie einen Out-of-Process-COM-Server ohne seine TLB-Datei

  • Server.exe: ein 32-Bit-out-of-process COM Server
  • CLSID_Application: Die GUID eines COM-Objekt in Server.exe
  • Client.exe: eine 64-Bit-Anwendung, die Client verwenden Server.exe in einer registrierungsfreien Weise.

Wie wir wissen, kann eine exe nicht als registrierungsfreie COM-Komponente verwendet werden, ein solches Verhalten zu imitieren, beginne ich den Prozess Server.exe mich von den genauen Pfad bereitstellt:

  • CreateProcess ("Server.exe")
  • IClassFactory * pFactory = CoGetClassObject (CLSID_Application)
  • pFactory-> CreateInstance (ppAppObject);

Es funktioniert, wenn ich die server.tlb registriert haben, aber nach austragen server.tlb, es nicht ganz den ppAppObject zu schaffen, auch wenn ich Manifest einbetten in beide Server.exe und 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> 

Haben Sie eine Idee dazu?

Edit: Es stellt sich heraus, dass es wirklich funktioniert, wenn ich tlbid für Schnittstellen angeben, und betten das Manifest sowohl exe

Antwort

3

Ist das <comInterfaceExternalProxyStub> Element ausreichend? Brauchen Sie nicht auch die <comClass> und <typelib> Elemente?

+0

Ich habe versucht , die nicht funktioniert. und konnte nur in einem -Tag verwendet werden, aber in meinem Fall ist die ausführbare Datei eine Exe, es wird nicht von der Registrierung kostenlose COM unterstützt –

Verwandte Themen