Я пишу программу на C ++ с QT для Windows, чтобы управлять несколькими научными аппаратными компонентами, один из которых представляет собой сценическую систему микроскопа, а другой - высокоскоростную камеру. Для связи оба предоставляют библиотеку C ++ (только заголовки) и библиотеку DLL для ссылки.
Я унаследовал некоторый код для системы сцены, которая, похоже, использовала компилятор MinGW-32. Используя MinGW-32, я могу успешно управлять системой сценического микроскопа с помощью функции, представленной в библиотеке. Тем не менее, компиляция с любым другим компилятором (например, 32-разрядный MSVC2017) завершается неудачно с LNK1107 (неверный или поврежденный файл, не может прочитать в 0x328), что означает, что он не может читать DLL.
У меня нет большого опытав кодировании и особенно в построении сложных систем, подобных этой, поэтому может показаться глупым следующее: с учетом того, что я до сих пор проводил исследования в Интернете, я думаю, что DLL для стадии микроскопа была также скомпилирована с MinGW32. Однако библиотеки DLL для высокоскоростной камеры , похоже, скомпилированы с какой-то версией MSVC.
При включении заголовков библиотеки камеры возникают различные ошибки при сборке, одной из которых является ошибка «Неподдерживаемая платформа», которая вызывается следующим кодом:
#if defined (_MSC_VER) && defined (_WIN32)
// Platform Microsoft windows, Microsoft tool chain
// some code
#else
# error Unsupported platform
#endif
Исходя из этого, я заключаю, что _MSC_VER будет определен только в том случае, если я буду использовать компилятор Microsoft, следовательно, MinGW32, похоже, не поддерживается, я прав?
Мне нужно общаться с обоими компонентами из одного и того жеПрограмма, в то же время, но из того, что я прочитал на SO, кажется невозможным использовать библиотеки DLL из разных компиляторов. Это правда? И если да, не могли бы вы предложить и альтернативный подход к использованию двух библиотек? У меня нет исходного кода, поэтому я не смогу собрать библиотеку самостоятельно.