Как я могу использовать функцию CoGetClassObject в x64 - PullRequest
2 голосов
/ 28 апреля 2010

У меня есть COM DLL, которая скомпилирована в 32-битном режиме (на стороне сервера). Я зарегистрировал его и попытался вызвать CoGetClassObject() с 32-разрядного клиента для получения IClassFactory.

Hr = CoGetClassObject(CLSID_IOrbCom, CLSCTX_INPROC_SERVER,
   0 , IDD_IClassFactory, (LPVOID*)&ClassFactory)

и это прекрасно работает для 32-битного клиента. Тем не менее, когда я попытался вызвать CoGetClassObject() с 64-разрядного клиента, я получил сообщение об ошибке «Класс не зарегистрирован».

Я могу скомпилировать мой COM-сервер только в 32-битном режиме. Моя ОС - 64-битная Windows XP.

Как мне заставить это работать?

1 Ответ

0 голосов
/ 19 ноября 2013

Это ожидаемое поведение - вы не можете загрузить 32-битную dll в 64-битный клиентский процесс, это просто не поддерживается ОС. Вам придется либо перекомпилировать сервер (и зарегистрировать его 64-разрядную версию), либо использовать DCOM, COM + или другое решение для взаимодействия, которое будет запускать 32-разрядный код в отдельном процессе и перенаправлять вызовы от клиента в этот процесс используя RPC.

...