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

Прошу подсказать решение проблемы.
Re: WTL. Проблема с форматированием double(float) (%f)
От: Аноним  
Дата: 01.07.09 20:05
Оценка:
Привет,

попробуй _fcvt или _gcvt

Щасливо
Re: WTL. Проблема с форматированием double(float) (%f)
От: Onorin Нигерия  
Дата: 02.07.09 06:34
Оценка:
Здравствуйте, 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: WTL. Проблема с форматированием double(float) (%f)
От: Sergey Chadov Россия  
Дата: 02.07.09 06:44
Оценка: +1
Здравствуйте, 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>>
Re[2]: WTL. Проблема с форматированием double(float) (%f)
От: Onorin Нигерия  
Дата: 02.07.09 11:51
Оценка:
Здравствуйте, 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)
От: alexplev  
Дата: 02.07.09 13:39
Оценка:
Спасибо всем за подсказки. Благодаря им нашел, что проект в студии 2003 создается с разными ключами Minimize CRT Use in ATL. В debug его нет, а в release он есть. Мне это живо напомнило военные карты, где чтобы запутать врага вносят ложные данные, а в военное время должны выдавать правильные карты, если успеют.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.