2015-01-10 1 views
-1

У меня есть консольное приложение win32, который использует некоторые функции MFC (CObject, CString и т.д.), он компилируется и работает без проблем в режиме отладки, используя следующие конфиги:Win32 консольного приложения и MFC библиотеки несовместимы во время выпуска компиляции

Configuration: Active(Debug) Platform: Active(Win32) 
General->Use of MFC->Use MFC in a Static Library 
C/C++->Code Generation->Runtime Library:Multi-threaded Debug DLL(/MDd) 

Однако, когда я пытался скомпилировать для Release режим (по-прежнему платформы Win32), используя следующие конфиги, он начинает иметь проблемы:

Configuration: Active(**Release**) Platform: Active(Win32) 
General->Use of MFC->Use MFC in a Static Library 
C/C++->Code Generation->Runtime Library: **Multi-threaded (/MT)** 

проблема с преобразованием между «туалет МФЦ har_t * 'to' char * 'и строковые литералы в' LPCTSTR 'и т. д. Но такая проблема не возникает, когда я компилирую ее для' Debug '!!!

Я знаю, что могу использовать такие вещи, как макрос _T и т. Д., Но их так много, и они явно работают в режиме отладки, поэтому я действительно надеюсь, что это просто некоторые простые (-ые) символы (-и), которые я изменяю в свойствах чтобы он работал для компиляции режима «Release». Помогите?

+0

'change 'Использовать MFC' в статическом или динамическом режиме, оба с ошибками' Failed with ** what ** errors? При работе с диалоговым окном «Свойства» убедитесь, что вы изменяете правильную конфигурацию - обратите внимание на раскрывающийся список «Конфигурация» в левом верхнем углу. –

+3

Существует две настройки: «Общие»> «Использование MFC» и «C/C++> Генерация кода> Библиотека времени выполнения». Оба должны согласиться - либо с использованием библиотеки DLL (aka shared library), либо с использованием статической библиотеки. Для настройки «Runtime Library» вам нужен вкус, который «отлаживается» в нем для конфигурации Debug, и аромат без «отладки» для конфигурации Release. –

+0

В свойствах проекта для конфигурации выпуска установите C/C++ -> Generation Generation-> Runtime Library для Multi Threaded (/ MT) –

ответ

0

@llnspectable и @Igor Tandetnik дал правильный ответ на мой вопрос.

В Visual Studio VC++ 2008, в соответствии с режимом отладки, для Свойства конфигурации -> Общие -> По умолчанию Project -> Character Set свойство, это 'Использование Multi-Byte Character Set'

Однако, когда я изменить компиляции режим «Отпустить», он автоматически изменит этот параметр на «Использовать набор символов Юникода». Таким образом, создавая несовместимость между строковыми классами MFC и функциями с нормальной строкой, т. Е. Char *

Итак, после того как я переключился в режим «Release», я убедился, что свойство Character Set имеет значение «Использовать многобайтовый набор символов». Проект успешно скомпилирован.

Кроме того, поскольку у меня есть класс и функции MFC в проекте, настройка «Использование MFC» - «Использовать MFC в статической библиотеке», чтобы обеспечить включение необходимых библиотек.

Смежные вопросы