libpqxx выдает исключение в режиме DEBUG

У меня есть проект MFC, в котором используется libpqxx. Все настройки по умолчанию.

Режим выпуска работает правильно, как я и ожидал. Но когда я переключаюсь в режим отладки, он показывает исключение и говорит об утверждении отладки:

Самое интересное, что если я использую Shared DLL вместо Static (конечно, при отладке), он работает!

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

Примечание. Этот проект является базовым и свежим. Я не менял никаких настроек из Configuratrion Manager.

Любое предложение?


person xangr    schedule 31.03.2013    source источник
comment
Общая отладочная DLL — как и что? Вы имеете в виду MFC или ATL?   -  person Ajay    schedule 31.03.2013
comment
Извините, забыл упомянуть об этом. Да, МФЦ. Я обновил свой вопрос.   -  person xangr    schedule 31.03.2013


Ответы (1)


Хорошо, я не уверен, использует ли libpqxx MFC или нет (и какой именно?). Я подозреваю, что вы выделяете часть памяти из одной кучи и освобождаете ее из другой кучи. Смешивание версий MFC, а также статическая/нестатическая смесь MFC вызовет это утверждение.

Не считайте это работающим над сборкой релиза! Он просто не защищает себя (т.е. теперь показывает какое-либо сообщение об утверждении). Лучше всего найти причину этой проблемы, и сначала нужно просмотреть стек вызовов (нажмите «Повторить попытку» в этом диалоговом окне утверждения).

Посмотрите, зависит ли libpqxx от MFC или запрещает смешивание статической версии MFC. Вы можете просмотреть документацию libpqxx и/или использовать Dependency Walker, чтобы узнать, использует ли библиотека MFC.

person Ajay    schedule 31.03.2013
comment
...as well as Static/non-Static mixture of MFC will cause this assertion... Наконец я выбрал другой файл библиотеки с именем libpqxxd.lib и woala :) Это просто работает. Я просто смешиваю вещи. - person xangr; 31.03.2013
comment
Кстати, это не для MFC напрямую. Потому что в MFC выдает ошибку null: идентификатор не найден. Но стандартный проект Win32 строится нормально. Я до сих пор не знаю, как передать нулевую ошибку. - person xangr; 31.03.2013