Я столкнулся с проблемой, на которую я почти уверен, что знаю ответ, но я решил по крайней мере спросить и посмотреть, есть ли какая-нибудь «волшебная пуля», которая может избавить меня от огромной головной боли.
Вот высокоуровневое представление.
У меня есть управляемое приложение. Это приложение взаимодействует с оборудованием через сторонние библиотеки разных производителей. У меня есть полный контроль над управляемым приложением-потребителем и нулевой контроль над библиотеками аппаратного API.
Поставщик A предоставляет только 32-битный собственный SDK. Чтобы мы могли использовать его в 64-битных системах, мы пометили приложение для запуска в 32-битном режиме. Все было хорошо.
Сейчас мы интегрируемся с поставщиком B, который предоставляет 64-битные библиотеки API-интерфейсов для 64-битных машин. 32-разрядная библиотека DLL от поставщика B не будет работать в 64-разрядной системе (пробовал это). Если я создаю тестовый жгут под управлением 64-битной или AnyCPU, он работает нормально. Если я отмечу его как 32-битный, он не будет работать при вызовах P / Invoke.
Похоже, что аппаратные средства Vendor A и Vendor B будут взаимоисключающими на 64-битных ПК, но мне интересно, есть ли у кого-нибудь предложения о том, как обойти это.