Связывание с двумя разными DLL (из разных компиляторов?) - PullRequest
0 голосов
/ 17 октября 2019

Я пишу программу на 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 из разных компиляторов. Это правда? И если да, не могли бы вы предложить и альтернативный подход к использованию двух библиотек? У меня нет исходного кода, поэтому я не смогу собрать библиотеку самостоятельно.

...