Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: CString - любить или прибить?  (Прочитано 5927 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Mike_I
Участник

ru
Offline Offline
Пол: Мужской
Mike


« : 29-06-2006 09:36 » 

Привет народ.
Постоянно встречаюсь с такой раздражающей проблемой:

Код:
 CEdit edtDateFrom;// Объявлен в другом месте
 . . .
 void SomeFunc()
 {
   CString *strDateFrom = new CString;
   . . .
   int iFromSize = edtDateFrom.LineLength();
   edtDateFrom.GetLine(0, strDateFrom->GetBuffer(), iFromSize);
   . . .
   delete strDateFrom; // Здесь выскакивает ошибка при выполнении
                                  // (не при компиляции)
}

Если закоментировать:
 /* edtDateFrom.GetLine(0, strDateFrom->GetBuffer(), iFromSize); */

 то все работает нормально. Т.е. при передаче буфера strDateFrom(тип CString) эта переменная как-бы залочивается, ее невозможно удалить, в нее невозможно записать другое значение, вызов ее методов(это экземпляр класса) напимер
 ->GetLength() дает 0, даже если это не так. в общем полная жопа.
Та-же ситуация если использовать не указатель а просто переменную CString.

Кстати то-же самое было когда я использовал тип LPSTRZ в функциях WinAPI например GetCurrentDir(), переменная залочивается и ничего с ней не сделать Жаль((

Что это за бодяга может мне кто-нибудь объяснить???
Записан

Nothing fails like success.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 29-06-2006 14:57 » 

любить Улыбаюсь

попробуй перед дилитом вызвать

strDateFrom->ReleaseBuffer();

её надо всегда вызывать после GetBuffer() для освобождения временного буфера
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 29-06-2006 23:24 » new

Mike_I, конечно прибить! Об чём разговор. Что не говори мерзопакостный объектик. А заодно и int, char, double, bool - от них тоже ничего хорошего ждать не приходится.
попробуй перед дилитом вызвать
strDateFrom->ReleaseBuffer();

Лёш, его даже это не спасёт. Всё равно будет программить на радость хакерам.

Что это за бодяга может мне кто-нибудь объяснить???

Неа не может, потому что это не бодяга, а элементарная безграмотность. Учи мат.часть - например MSDN - она несёт разумное доброе вечное Ага А без этого любое незнание будет превращаться в бодягу и раздражающие проблемы. А построение собственных утопий, типа "переменная залочивается" (кстати, а что ты под этим подразумеваешь?) ни к чему хорошему не приведёт. В общем проблемы из серии: "Я вроде всё делаю неправильно, а оно не работает как я хочу".

Вот здесь подобная проблема уже обсуждалась и всё подробно разжёвано, почитай может поможет:
https://forum.shelek.ru/index.php/topic,9004.msg131667.html#msg131667
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines