Какова точно “Многопоточная Отладка DLL” опция Runtime Library, делающая в VS 2008?

У меня есть решение в VS 2008, который создает DLL. Я затем использую тот DLL в другом приложении. Если я вхожу к страницам свойств проектов DLL и изменяю следующую конфигурацию для Отладочная сборка затем, созданный dll не долго обеспечивает желаемую функциональность. Если я возвращаю его и восстанавливаю DLL, то DLL действительно обеспечивает корректную функциональность:

Страницы свойств => Свойства Конфигурации => C/C++ => Генерация кода => Библиотека времени выполнения

Если установлено на "Многопоточную Отладку DLL (/MDd)" затем все работает, как это должно. Я получаю корректную функциональность от DLL

Если установлено на "Многопоточный DLL (/MD)" затем DLL не функционирует правильно... никакие ошибки периода выполнения или что-либо, он просто не работает (DLL, как предполагается, строит некоторые графики на карте, но не делает в этом режиме).

Таким образом, вопрос, почему делает использование результата флага/MDd в функциональности исправления базового кода, в то время как / MD приводит к неправильной функциональности?

Немного фона..., кто-то еще разработал DLL в C++ и я использую этот DLL в приложении VB.net.

18
задан GregH 29 March 2010 в 23:59
поделиться

2 ответа

Все DLL/генерация отладочного кода должны соответствовать всему, что их использует. Там может быть другая библиотека или объект, или dll, или какой-то код, который собран с использованием неправильных опций; или специфические опции для отдельного элемента, которые переопределяют глобальные опции проекта.

Единственный способ выяснить это - тщательно проверить все опции для каждого файла, проверяя включенные и ссылающиеся библиотеки (.lib и .dll) и файлы объектов. Проверьте также опции компоновщика.

Причина, по которой это не работает, вероятно, заключается в том, что отладочная версия добавляет дополнительные защитные блоки вокруг памяти для обнаружения ошибок.

10
ответ дан 30 November 2019 в 08:47
поделиться

Основное различие между двумя вариантами заключается в библиотеках, с которыми ваш код будет компоноваться позже. например, для отладочной версии это будет LIBCMTD.LIB и некоторые другие. если ваша библиотека будет построена как отладка, вы всегда должны связываться с MDd. в противном случае это приведет в лучшем случае к множеству нерешенных ошибок внешнего компоновщика. а иногда код компилируется нормально, но дает сбой во время выполнения. если это происходит в vb.net, то ошибка может легко скрыть ловушку. Думаю, вам следует убедиться, что вы правильно настроили сборку. для более подробной информации проверьте this .

6
ответ дан 30 November 2019 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: