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

Название темы: Строки в С\С++
Показать сообщение отдельно

Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


vasketsov
AddString может принимать как CString, так и char *
функция прорисовки в любом случае получает только DWORD, вытаскивать что там такое моя задача (несложная) Я трейсером смотрел все она передает, но только почему-то (трейсер не улавливает) перерисовывает эти данные не один раз а три.
Но ладно бы так как я делаю, но я удалить не могу эти строки (которые создаю), иначе на экран выводится
"ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ"
причем удалить не могу ни до, ни после отрисовки, потому-что она еще раз вызывается. и если я удаляю после AddString, оно понятно почему накрывается.
А если в DrawItem(...)

Код: Выделить весь код
 * *const char*s=_T(LPCTSTR(lpDrawItemStruct->itemData));
 * *dc.DrawText(s), rect, 
 * *DT_LEFT | DT_WORDBREAK);
 * *dc.Detach();
 * *delete s[];
Одно из последних "извращений" приводящих к краху
Vaulter
Цитирую из книги "Программирование на VC++ 6.0" серия для профессионалов
Чтобы константы гарантированно хранились вместе с программой, придется немного поработать. Во превых, обратите внимание на строковые константы, которыми часто изобилуют программы. Может, Вы решили, что они будут данными "только для чтения"? Тогда попробуйте угадать еще раз. Действительно, поскольку Вы имеете право написать что-нибудь вроде
Код: Выделить весь код
char *pch ="test";
*pch='x';
"test" не может быть константой. Чтобы строка стала константой, ее надо соответствующим образом *объявить и инициализировать, например, так:

Код: Выделить весь код
const char g_pch[]="test";
Теперь g_pch хранится вместе с кодом. Но где именно?Чтобы ответить на этот вопрос, надо знать о секциях данных (data session), генерируемых компоновщиком Visual С++.
...
Имя * * *Тип * * * * * Доступ * * * * * * * * * * Содержимое
.text * * код * * * * * *только чтение * * * * *код программы
.rdata * данные * * только чтение * * * * *инициализированные константы
.data * *данные * * *чтение и запись * * *инициализированные данные (не кон)
.bss * * данные * * * чтение и запись * * неинициализ данные (не кон)

Секция .rdata - часть EXE файла, именно сюда компоновщик поместит переменную g_pch.

Из всего вышесказанного становится непонятно почему не работает код, ставшей причиной этого топика


[s]Исправлено: Crew, 0:04 10-04-2003[/s]

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 23:51, 09-04-2003 | #19

Название темы: Строки в С\С++