Frage

Es handelt sich um Fenster COM-Komponente.

  • Server.exe: ein 32-Bit-out-of-Process-COM-Server
  • CLSID_Application: Die GUID eines COM-Objekts in Server.exe
  • Client.exe: a. 64-Bit-Client-Anwendung, die Server.exe in einem Registrierungsfreien Art und Weise verwenden

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

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

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

War es hilfreich?

Lösung

Ist das <comInterfaceExternalProxyStub> Element ausreichend? Sie nicht brauchen, um die <comClass> und <typelib> Elemente als auch?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top