Использование COM-моста для вызова 64-битного процесса из 32-битного процесса - Как включить COM-объект для доступа к аппаратным ресурсам - PullRequest
0 голосов
/ 14 июня 2019

Я пишу графический интерфейс C # WPF, который требуется клиенту для использования ряда зависимостей с близким исходным кодом. Некоторые из этих зависимостей не имеют 64-битных версий. Однако есть сегмент кода, который требует, чтобы он был скомпилирован в 64-битной версии, чтобы предоставить ему доступ к большему объему памяти. Чтобы преодолеть эту проблему, я скомпилировал большую часть приложения в 32-битной системе, и для частей, которые должны быть 64-битными, я разбил их на отдельные библиотеки DLL и использовал мост COM. Для создания моста я следовал следующему руководству:

https://www.codeproject.com/Tips/1199539/Using-bit-DLLs-in-bit-Processes-Using-Out-of-proce

Это все работает нормально. Я могу вызывать методы в 64-битной dll из 32-битной dll через com-мост. Однако я столкнулся с проблемой. 64-битная dll, зарегистрированная через regasm, не может получить доступ к аппаратным ресурсам.

Зарегистрированная COM DLL ссылается на набор сборок, которые взаимодействуют с детектором рентгеновского излучения. Эти сборки позволяют программе .NET сканировать и подключаться к устройствам детектора рентгеновского излучения, подключенным к ПК. Суть проблемы заключается в следующем:

Когда методы в этой 64-битной dll вызываются через COM-мост, dll не может найти или подключиться к оборудованию xray, подключенному к ПК. Однако, если я создаю тестовую программу, которая напрямую ссылается на эту сборку, проблема исчезнет.

Поэтому мой вопрос таков: есть ли какое-то разрешение, которое мне нужно, чтобы получить зарегистрированную COM библиотеку DLL, чтобы позволить ей получать доступ к аппаратным ресурсам?

...