Как можно легко использовать 32-разрядный внутрипроцессный COM-сервер из 64-разрядных приложений?

У меня есть 32-разрядный встроенный COM-сервер C ++ ATL, который зависит от огромного набора устаревших 32-разрядных библиотек. Мне нужно использовать его из 64-битного приложения с минимально возможными изменениями.

Один из вариантов - поместить его в приложение COM +. Какие еще простые варианты?


person sharptooth    schedule 09.11.2009    source источник


Ответы (1)


Создайте 32-битное вспомогательное приложение, которое загружает dll сервера inproc, но действует как локальный сервер.

Скомпилируйте код заглушки прокси для 64 бит.

Затем, когда 64-битное приложение пытается загрузить ваш ActiveX, вместо использования 32-битного inproc (который оно не может загрузить) оно загружает 32-битный локальный сервер - отдельный процесс, который является законным.

Заглушка прокси, которая представляет собой автоматически сгенерированный код из вашего IDL, должна быть создана для 64-битной версии.

person Chris Becke    schedule 09.11.2009
comment
Звучит как большая работа. Мне нужно создать отдельный .exe, разобраться, как его и прокси / заглушку прописать в реестре. - person sharptooth; 09.11.2009
comment
Но это все стандартные вещи. Альтернативой является рефакторинг вашей COM-библиотеки для сборки и работы в 64-битном формате. Вы просто не можете загрузить 32-битную dll в 64-битный процесс, поэтому выяснение того, как разместить ее в 32-битном процессе, на самом деле единственный способ избежать восстановления элемента управления как 64-битного элемента управления. - person Chris Becke; 09.11.2009
comment
Да, я это понимаю. Одно только предлагаемое вами решение кажется трудоемким по сравнению с простым помещением в COM + - и это всего лишь несколько щелчков мышью. - person sharptooth; 09.11.2009
comment
если нет необходимости в 64-битной версии, простой способ - это тот, который вы уже исключили. Скомпилируйте новое приложение как 32-битное, пока вы не конвертируете 32-битный код в 64-битный. . . Такие преобразования всегда мучительно ... Около десяти лет назад я помог с преобразованием 16-битного (pre ANSI) c в 32-битный c / c ++ ... это был долгий проект. - person Jason D; 05.12.2009