Как использовать внепроцессный COM-сервер без его файла tlb - PullRequest
8 голосов
/ 03 марта 2010

Речь идет о компоненте 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

1 Ответ

3 голосов
/ 03 марта 2010

Достаточно ли элемента <comInterfaceExternalProxyStub>? Вам не нужны элементы <comClass> и <typelib>?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...