Как reference counting чуть было не заставил поверить меня в мистику
January 15th, 2008 Begemot Posted in Программирование
Вчера вечером была написанна функция. Сегодня утром DialogBloks похерил мне весь файл, файл был восстановлен с архива, функция востановленна с аськи\почты. Но одно но - она не работала!, не работал не первый, ни второй вариант, всего было написанно три, третий работал но я проверил его только в конце. Функция простая как две копейки, берем строку, получаем ее внутренний буфер и отдаем винапи для изменения.
Обьявление функции:
void BegUtils::StrMakeLowerUniversal(wxString & data)
Первый
CharLower( data.GetWriteBuf(data.Length()) );
data.UngetWriteBuf();
и второй нерабочий вариант тела
wxStringBuffer buf(data, data.length()+1);
CharLower(buf);
Вчера работало - сегодня нет, классика
Оказалось все дело в контексте вызова - вот так работает
wxString data=_("NTnt НТнт öffnen вікно привет Donnée rápido test");
BegUtils::StrMakeLowerUniversal(data);
wxMessageBox(data);
А вот так уже нет
wxString data1=_("NTnt НТнт öffnen вікно привет Donnée rápido test");
wxString data(data1);
BegUtils::StrMakeLowerUniversal(data);
wxMessageBox(data);
Все оказалось прозаично, оптимизация строк, reference counting и разделямый внутренний буфер. Подробности обьяснять не буду - сам толком не понимаю, а ляпнуть что-нибудь и выглядеть дураком не хочется:) Зато дам вариант функции который работает и который я юзаю.
void BegUtils::StrMakeLowerUniversal(wxString & data)
{ #ifdef __WIN32__ int len=data.length()+1;
wxChar * buf = new wxChar[len]; wxStrcpy(buf, data.c_str()); CharLower(buf); data=buf;
delete [] buf;
#else data.MakeLower(); #endif }
Кстати это функция преобразования строки к нижнему регистру, которая работает со сторой на любом языке, а не только с латинскими сиволами как стандартная MakeLower. Но только под MSW.
Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.
January 29th, 2008 at 12:29 am
Отправил им насчет визуальных багов:
http://www.kirix.com/forums/viewtopic.php?f=15&t=600
Обещают написать новый wxToolBar =)
December 15th, 2008 at 12:27 am
[...] уже как-то писал про "мистику" . Вот сегодня еще наткнулся на интересные грабли. [...]