У меня есть решение в VS 2008, который создает DLL. Я затем использую тот DLL в другом приложении. Если я вхожу к страницам свойств проектов DLL и изменяю следующую конфигурацию для Отладочная сборка затем, созданный dll не долго обеспечивает желаемую функциональность. Если я возвращаю его и восстанавливаю DLL, то DLL действительно обеспечивает корректную функциональность:
Страницы свойств => Свойства Конфигурации => C/C++ => Генерация кода => Библиотека времени выполнения
Если установлено на "Многопоточную Отладку DLL (/MDd)" затем все работает, как это должно. Я получаю корректную функциональность от DLL
Если установлено на "Многопоточный DLL (/MD)" затем DLL не функционирует правильно... никакие ошибки периода выполнения или что-либо, он просто не работает (DLL, как предполагается, строит некоторые графики на карте, но не делает в этом режиме).
Таким образом, вопрос, почему делает использование результата флага/MDd в функциональности исправления базового кода, в то время как / MD приводит к неправильной функциональности?
Немного фона..., кто-то еще разработал DLL в C++ и я использую этот DLL в приложении VB.net.
Все DLL/генерация отладочного кода должны соответствовать всему, что их использует. Там может быть другая библиотека или объект, или dll, или какой-то код, который собран с использованием неправильных опций; или специфические опции для отдельного элемента, которые переопределяют глобальные опции проекта.
Единственный способ выяснить это - тщательно проверить все опции для каждого файла, проверяя включенные и ссылающиеся библиотеки (.lib и .dll) и файлы объектов. Проверьте также опции компоновщика.
Причина, по которой это не работает, вероятно, заключается в том, что отладочная версия добавляет дополнительные защитные блоки вокруг памяти для обнаружения ошибок.
Основное различие между двумя вариантами заключается в библиотеках, с которыми ваш код будет компоноваться позже. например, для отладочной версии это будет LIBCMTD.LIB и некоторые другие. если ваша библиотека будет построена как отладка, вы всегда должны связываться с MDd. в противном случае это приведет в лучшем случае к множеству нерешенных ошибок внешнего компоновщика. а иногда код компилируется нормально, но дает сбой во время выполнения. если это происходит в vb.net, то ошибка может легко скрыть ловушку. Думаю, вам следует убедиться, что вы правильно настроили сборку. для более подробной информации проверьте this .