32 и 64-битная совместимость в 64-битной Windows - PullRequest
8 голосов
/ 25 января 2011

Существует ли хороший подробный авторитетный справочник, в котором обсуждается взаимодействие между 32-разрядными и 64-разрядными процессами?Основываясь на поиске в Google, я сделал вывод, что:

  1. 32-битная DLL может находиться только в 32-битном процессе, а 64-битная DLL только в 64-битном процессе.
  2. 32 и 64-битные процессы могут обмениваться данными только с использованием слабо связанных систем сообщений, таких как сетевые коммуникации, что означает, что они могут обмениваться данными с помощью COM / DCOM.
  3. 32 и 64-битные компоненты COM имеют разные записи реестра.Компонент обычно регистрируется только в одном из двух и, как правило, виден только в одном из двух миров.
  4. 32-битный процесс может создать что-то, зарегистрированное как 64-битный компонент COM, только если он использует CoCreateInstance сфлаг 64-битного вызова, или (и я предполагаю, что это возможно?), если 64-битный компонент каким-то образом зарегистрирован в 32-битном реестре, но под капотом все еще создается как вне процесса 64или если есть COM-компонент 32-битной оболочки, который создает 64-битный компонент и затем перенаправляет вызовы к нему?

Это говорит о том, что: 1. 32-битное приложение можетне использовать GetObject, чтобы получить 64-разрядную версию Excel, которая работает?Или это может?Как влияет на работающую таблицу объектов (ROT) 32 или 64-битная проблема?Может ли 32-разрядный процесс создать экземпляр Excel, если установлена ​​только 64-разрядная версия Office?Я бы подумал, что ответ будет «нет», если 32-разрядный процесс не использует 64-разрядный флаг в своем вызове CoCreateInstance или если Excel каким-либо образом зарегистрируется и в 32-разрядном мире?

Имеет ли Microsoftавтоматически делать что-то вроде CoCreateInstance из 32-битного процесса, проверить 64-битный реестр и попытаться создать 64-битный компонент вне процесса, если в 32-битном реестре нет ни одного зарегистрированного?Я видел некоторые заметки о выпуске из 64-битного Office, где Microsoft предупреждает о том, что доступ из 32-битных приложений к 64-битному Excel не работает, но я знаю один случай, когда он, кажется, просто работал.

Есть лихороший технический фактический справочник для этого?

1 Ответ

5 голосов
/ 26 января 2011

Это довольно хорошо объяснено в документации MSDN Library для CLSCTX. Много правил, поведение по умолчанию:

Если ни клиент, ни сервер указывает предпочтение, затем:

  • Если компьютер, на котором размещен сервер, работает под управлением Windows XP или Windows Server 2003 без службы Пакет 1 (SP1) или более поздний установлен, затем COM предпочтет 64-битную версию сервер, если имеется; иначе это активирует 32-битную версию сервер.

  • Если компьютер, на котором размещен сервер, работает под управлением Windows Server 2003 с установленным SP1 или новее, затем COM постараюсь соответствовать серверу архитектура для клиента архитектура. Другими словами, для 32-битный клиент, COM активирует 32-битный сервер, если имеется; иначе это активирует 64-битную версию сервер. Для 64-битного клиента COM активирует 64-битный сервер, если имеется в наличии; в противном случае он будет активирован 32-битный сервер.

Проверьте статью MSDN, если вы хотите изменить это поведение.

...