Речь идет о компоненте Window COM.
- Server.exe: 32-битный внепроцессный COM-сервер
- CLSID_Application: GUID COM-объекта в Server.exe
- Client.exe: 64-битное клиентское приложение, которое использует Server.exe без регистрации.
Как мы знаем, exe-файл нельзя использовать в качестве COM-компонента без реестра, чтобы имитировать такое поведение, я сам запускаю процесс Server.exe, указывая точный путь:
- CreateProcess ( "Server.exe")
- IClassFactory * pFactory = CoGetClassObject (CLSID_Application)
- pFactory-> CreateInstance (ppAppObject);
Это работает, если у меня есть зарегистрированный Server.tlb, но после отмены регистрации 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>
У вас есть идеи по этому поводу?
Edit:
Оказывается, это действительно работает, если я указываю tlbid для интерфейсов и встраиваю манифест в оба exe