Существует ли хороший подробный авторитетный справочник, в котором обсуждается взаимодействие между 32-разрядными и 64-разрядными процессами?Основываясь на поиске в Google, я сделал вывод, что:
- 32-битная DLL может находиться только в 32-битном процессе, а 64-битная DLL только в 64-битном процессе.
- 32 и 64-битные процессы могут обмениваться данными только с использованием слабо связанных систем сообщений, таких как сетевые коммуникации, что означает, что они могут обмениваться данными с помощью COM / DCOM.
- 32 и 64-битные компоненты COM имеют разные записи реестра.Компонент обычно регистрируется только в одном из двух и, как правило, виден только в одном из двух миров.
- 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 не работает, но я знаю один случай, когда он, кажется, просто работал.
Есть лихороший технический фактический справочник для этого?