Есть структура и переменная Код (Text): typedef struct RuDataStruct { LPVOID baseAddr; LPVOID letters[33]; // }RuDataStruct; RuDataStruct RuData; Читаю файл-словарь (текст на русском), и определяю адреса, с которых начинаются новые буквы по алфавиту, занося эти адреса в RuData.letters. После заполнения массива адресов пытаюсь добавить строки с этих адресов в комбобокс: Код (Text): for ( int i=0; i<33; i++ ) { RtlMoveMemory (buffer, RuData.letters[i], 10); //кусок строки в буфер buffer[10] = 0; MessageBox (NULL,buffer, NULL, NULL); //проверяю - строка в буфере SendMessage ( hCombo, CB_ADDSTRING, NULL, (LPARAM) buffer ); } Строки в MessageBox отображаются нормально, а в комбо не добавляются. В то же время, если этим же алгоритмом добавлять в комбо не русские, а английские строки, то они в комбо добавляются. Также добавляется и строка, заданная непосредственно: Код (Text): SendMessage ( hCombo, CB_ADDSTRING, NULL, (LPARAM) "Строка" ); В чем тут проблема?
cresta 1. Загрузить прогу в Olly. 2. Поставить бряк на SendMessage. 3. Посмотреть на содержимое buffer. Потом вместо buffer подсунуть константную строку и повторить п1-3. Сравнить. Вот и всё.
Может виндовые прибамбасы с locale или юникодом при использовании стилей CBS_SORT или CBS_LOWERCASE\UPPERCASE ?
С locale это не связано, проверял. Рыться отладчиком в недрах RtlMoveMemory сейчас некогда, думал может кто-нибудь с подобным встречался. А пока просто Код (Text): for (int j=0; j<10; j++) buffer[j] = *((char*) ((int)RuData.letters[i]+j)); buffer[10] = 0;