Я столкнулся с подобной ситуацией, когда у меня было две библиотеки, одна была построена с MT, а другая - с MD.Мне пришлось создать исполняемый файл, который использует функции обеих библиотек.Библиотека, созданная как MD, была сторонней, поэтому я не смог ее перестроить, и библиотека, созданная как MT, имеет много зависимостей, и строить их все, так как MD - большая боль.Я получал сообщение об ошибке из стороннего конфигурационного заголовочного файла, который сделал обязательным создание исполняемого файла как MD.Я искал простой способ упаковки dll третьей стороны как отдельную dll, как упоминалось в вопросе.Тем не менее, я не смог найти достаточно объяснений в Интернете по этому простому пути.Отсюда и мои два цента ниже.Вот как я обхожу это
- Я создал еще один .dll, который действовал как интерфейс.Этот интерфейс в основном обернул все вызовы API, которые были сделаны сторонним DLL.Заголовочный файл для этого интерфейса не содержал никаких заголовочных файлов от сторонних dll, а все эти заголовочные файлы были включены в файл interface.cpp.Как вы и ожидали, интерфейс был построен как MD.
Теперь в моем файле main.cpp я включил этот заголовочный файл интерфейса для выполнения всех вызовов сторонней библиотеки dll через интерфейс.
При передаче аргументов интерфейсу необходимо проявлять особую осторожность.Базовые переменные, такие как int, bool и т. Д., Могут быть переданы как значения.Однако любой класс или структура должны быть переданы как постоянные ссылки, чтобы избежать повреждения кучи.Это применимо к четной строке.
Рад поделиться более подробной информацией, если неясно!