Здравствуйте, alexplev, Вы писали:
A>WTL. Невозможно отформатировать число double или float. Используется класс CString ATL. A>В stdafx.h
A>Прошу подсказать решение проблемы.
Убрать галочку Minimize CRT Use in ATL
--
Sergey Chadov
... << RSDN@Home 1.2.0 alpha rev. 685>>
WTL. Проблема с форматированием double(float) (%f)
Все нормально в режиме debug, когда используется библиотека времени исполнения LIBCMTD.lib, но как только перехожу в release то
строка не форматируется и вместо числа выводится символ форматирования(f). Перекопал все примеры и нигде не нашел форматирования
double или float. Хотел избавиться от MFC в одной работе и сразу напоролся на такой казус, работа остановилась, хоть отказывайся от WTL.
Пытался обойти, используя такой код:
Здравствуйте, alexplev, Вы писали:
A>WTL. Невозможно отформатировать число double или float. Используется класс CString ATL. A>В stdafx.h
A>#include <atlbase.h> A>#if _ATL_VER >= 0x0700 A> #include <atlcoll.h> A> #include <atlstr.h> A> #include <atltypes.h> A> #define _WTL_NO_CSTRING A> #define _WTL_NO_WTYPES A>#else A> #define _WTL_USE_CSTRING A>#endif
A>Код для проверки.
A> double t=20.359f; A> CString str; A> str.Format(_T("%f"),t); A> MessageBox(str,_T("test"),MB_OK);
A>Все нормально в режиме debug, когда используется библиотека времени исполнения LIBCMTD.lib, но как только перехожу в release то A>строка не форматируется и вместо числа выводится символ форматирования(f). Перекопал все примеры и нигде не нашел форматирования A>double или float. Хотел избавиться от MFC в одной работе и сразу напоролся на такой казус, работа остановилась, хоть отказывайся от WTL. A>Пытался обойти, используя такой код:
A> double t=20.359f; A> WCHAR wbuf[64]; A> WCHAR wfmt[] = _T("%f");; A> swprintf(wbuf,wfmt,t); A> ::MessageBox(NULL,wbuf,_T("test"),MB_OK);
A>И получил ошибки линковщика, с первой можно справиться, но вторая повергла меня в уныние. Причем картина та же, ошибка только в release.
A>LIBCMT.lib(crt0dat.obj) : error LNK2005: __osplatform already defined in A>atlmincrt.lib(atlinit.obj) A>LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main A>referenced in function _mainCRTStartup A>Release/WTLtemp.exe : fatal error LNK1120: 1 unresolved externals
A>Прошу подсказать решение проблемы.
Вы шестую студию используете?
Re[2]: WTL. Проблема с форматированием double(float) (%f)
Здравствуйте, Onorin, Вы писали:
O>Здравствуйте, alexplev, Вы писали:
A>>WTL. Невозможно отформатировать число double или float. Используется класс CString ATL. A>>В stdafx.h
A>>#include <atlbase.h> A>>#if _ATL_VER >= 0x0700 A>> #include <atlcoll.h> A>> #include <atlstr.h> A>> #include <atltypes.h> A>> #define _WTL_NO_CSTRING A>> #define _WTL_NO_WTYPES A>>#else A>> #define _WTL_USE_CSTRING A>>#endif
A>>Код для проверки.
A>> double t=20.359f; A>> CString str; A>> str.Format(_T("%f"),t); A>> MessageBox(str,_T("test"),MB_OK);
A>>Все нормально в режиме debug, когда используется библиотека времени исполнения LIBCMTD.lib, но как только перехожу в release то A>>строка не форматируется и вместо числа выводится символ форматирования(f). Перекопал все примеры и нигде не нашел форматирования A>>double или float. Хотел избавиться от MFC в одной работе и сразу напоролся на такой казус, работа остановилась, хоть отказывайся от WTL. A>>Пытался обойти, используя такой код:
A>> double t=20.359f; A>> WCHAR wbuf[64]; A>> WCHAR wfmt[] = _T("%f");; A>> swprintf(wbuf,wfmt,t); A>> ::MessageBox(NULL,wbuf,_T("test"),MB_OK);
A>>И получил ошибки линковщика, с первой можно справиться, но вторая повергла меня в уныние. Причем картина та же, ошибка только в release.
A>>LIBCMT.lib(crt0dat.obj) : error LNK2005: __osplatform already defined in A>>atlmincrt.lib(atlinit.obj) A>>LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main A>>referenced in function _mainCRTStartup A>>Release/WTLtemp.exe : fatal error LNK1120: 1 unresolved externals
A>>Прошу подсказать решение проблемы.
O>Вы шестую студию используете?
Если шестерку используете, то попробуйте сделать так:
#define _ATL_USE_CSTRING_FLOAT
Re: WTL. Проблема с форматированием double(float) (%f)
Спасибо всем за подсказки. Благодаря им нашел, что проект в студии 2003 создается с разными ключами Minimize CRT Use in ATL. В debug его нет, а в release он есть. Мне это живо напомнило военные карты, где чтобы запутать врага вносят ложные данные, а в военное время должны выдавать правильные карты, если успеют.