WTL. Проблема с форматированием double(float) (%f)
От: alexplev  
Дата: 01.07.09 19:08
Оценка:
WTL. Невозможно отформатировать число double или float. Используется класс CString ATL.
В stdafx.h

#include <atlbase.h>
#if _ATL_VER >= 0x0700
#include <atlcoll.h>
#include <atlstr.h>
#include <atltypes.h>
#define _WTL_NO_CSTRING
#define _WTL_NO_WTYPES
#else
#define _WTL_USE_CSTRING
#endif

Код для проверки.

double t=20.359f;
CString str;
str.Format(_T("%f"),t);
MessageBox(str,_T("test"),MB_OK);

Все нормально в режиме debug, когда используется библиотека времени исполнения LIBCMTD.lib, но как только перехожу в release то
строка не форматируется и вместо числа выводится символ форматирования(f). Перекопал все примеры и нигде не нашел форматирования
double или float. Хотел избавиться от MFC в одной работе и сразу напоролся на такой казус, работа остановилась, хоть отказывайся от WTL.
Пытался обойти, используя такой код:

double t=20.359f;
WCHAR wbuf[64];
WCHAR wfmt[] = _T("%f");;
swprintf(wbuf,wfmt,t);
::MessageBox(NULL,wbuf,_T("test"),MB_OK);

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

LIBCMT.lib(crt0dat.obj) : error LNK2005: __osplatform already defined in
atlmincrt.lib(atlinit.obj)
LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main
referenced in function _mainCRTStartup
Release/WTLtemp.exe : fatal error LNK1120: 1 unresolved externals

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