Используйте 64-битные COM-объекты из 32-битного процесса - PullRequest
2 голосов
/ 01 мая 2010

Я использую API Virtualbox, который использует COM на Windows. Если у вас 64-битная ОС, она установит 64-битную версию, и интерфейсы COM будут доступны для 64-битных клиентов, но не для 32-битных. Мне сказали, что это ограничение COM, но я видел способы использования dll32 для «публикации» 32-битных интерфейсов в реестре, поэтому 64-битные процессы могут вызывать эти COM-серверы, но я не могу обратный, доступ к 64-битным интерфейсам из 32-битных процессов.

Если бы я не был очень ясен, я считаю, что этот человек хочет добиться чего-то похожего: http://www.codeproject.com/Forums/1648/COM.aspx?fid=1648&df=90&mpp=25&sort=Position&select=1702805&tid=1702805

1 Ответ

4 голосов
/ 01 мая 2010

В процессе thunking всегда будет работать только от более высокой разрядности до более низкой, а не наоборот. Когда вышел Win32, 32-битный процесс мог отбросить 16-битную DLL, но не было никакого способа, как 32-битная библиотека могла быть преобразована в 16-битный процесс. То же самое верно и сейчас, 32-битная DLL может быть преобразована в 64-битный процесс, но 64-битная DLL не может быть преобразована в 32-битный процесс (за исключением эмулятора WOW64 DLL : Wow64.dll, wow64Win.dll и Wow64Cpu.dll).

Если вы хотите загрузить 64-битный COM in-process-dll, вам потребуется 64-битный загрузчик вне процесса, и ваше 32-битное приложение может обмениваться данными с загруженными и передавать необходимые параметры для вызова, и получить результат.

Для 64-битных локальных COM-серверов без процесса вам понадобятся 32-битные прокси-библиотеки DLL, см. Межпроцессное взаимодействие между 32-битными и 64-битными приложениями .

...