Wie einen Out-of-Process-COM-Server, ohne die TLB-Datei verwenden
-
24-09-2019 - |
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
Lösung
Ist das <comInterfaceExternalProxyStub>
Element ausreichend? Sie nicht brauchen, um die <comClass>
und <typelib>
Elemente als auch?