C ++ / CLI 64-битный COM - PullRequest
       41

C ++ / CLI 64-битный COM

3 голосов
/ 03 сентября 2010

У меня есть сборка C ++ / CLI, которая оборачивает собственную 32-разрядную библиотеку DLL.

Сборка используется как из .Net, так и из COM (office).

Теперь у меня есть клиенткоторый запускает 64-битный офис.

Можно ли создать сборку C ++ / CLI, которая использует собственную 32-битную DLL и экспортирует 64-битный com-интерфейс?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Нет, вы не можете смешивать код с разной битностью в одном процессе в Windows. Вам нужно принудительно ввести 32-битный код в отдельный процесс или преобразовать эту DLL.

Последнее, вероятно, может быть достигнуто с помощью COM + (или DCOM, который в основном одинаков). Это то, что мы обычно делаем с нативным кодом C ++. Я не уверен, насколько это легко с C ++ / CLI сборками.

0 голосов
/ 03 сентября 2010

В некотором смысле, да.

Продолжайте компилировать код C ++ / CLI как 32-битный, чтобы он мог использовать собственную библиотеку с помощью взаимодействия C ++.

Затем вам придется настроить его для загрузки в качестве COM-сервера вне процесса при работе в качестве плагина Office 64. С родным кодом COM Midl автоматически генерирует 64-битный прокси. Должна быть некоторая аналогичная возможность создания прокси при регистрации классов .NET, помеченных COMVisible.

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

...