27 нояб. 2009 г.

MinGW, wxString::ToLongLong() и все все все

Дано:
wxString - строка содержащая число в строковом представлении.
m_nSize - 64 битное число.
MinGW - компилятор.
wxWidgets - фреймворк.

Задача:
Конвертировать строку в число, дабы произвести некие действия.

Решение:
Открываем доки, ищем и находим следующее:

wxString::ToLongLong
bool ToLongLong(wxLongLong_t *val, int base = 10) const

Если конвертирование возможно получаем true, но вся соль в том, что в случае с MinGW во всех случаях обламываемся и получаем false, т.к. есть некоторое условие:

Compilers with C99 support and Microsoft Visual C++ version 7 and higher do support this.

Читаем и изучаем stdlib.h и внимательно справку по wxString
Получаем следующее:

m_nSize = atoll(strHeaderSize.char_str());

Проверяем результат:

wxMessageBox(wxString::Format(wxT("%lld"), m_Size));

и обламываемся, оказывается M$ имеет свой стандарт на форматирование и в MinGW

надо использовать следующее:

wxMessageBox(wxString::Format(wxT("%I64d"), m_nSize));


Да-да, стандарты существуют для того же для чего и законы.


P.S. в Symbian при переходе с 7.0s-8.1a на 8.1b тоже изменили:

BEFORE:

x.GetTInt();

AFTER:

I64INT(x);

Комментариев нет: