Comment utiliser un out-of-process serveur COM sans son fichier TLB
-
24-09-2019 - |
Question
Il est sur la fenêtre composant COM.
- Server.exe: un 32bit hors processus serveur COM
- CLSID_Application: Le GUID d'un objet COM dans Server.exe
- Client.exe:. Une application client 64 bits qui utilisent Server.exe d'une manière sans registre
Comme nous le savons, un exe ne peut pas être utilisé comme composant COM sans registre, pour imiter un tel comportement, je commence le processus moi-même Server.exe en fournissant le chemin exact:
- CreateProcess ( "Server.exe")
- IClassFactory * pFactory = CoGetClassObject (CLSID_Application)
- pFactory-> CreateInstance (ppAppObject);
Il fonctionne si je le registred Server.tlb, mais après désinscription Server.tlb, il vient d'échouer à créer le ppAppObject, même si j'intégrer manifeste à la fois Server.exe et 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>
Avez-vous une idée à ce sujet?
Edit: Il se trouve que cela fonctionne vraiment si je précise tlbid pour les interfaces et intégrez le manifeste à la fois exe
La solution
est l'élément <comInterfaceExternalProxyStub>
suffisant? Ne pas vous avez besoin des éléments de <comClass>
et <typelib>
ainsi?