RtlUpcaseUnicodeString глючит

Тема в разделе "WASM.BEGINNERS", создана пользователем WIN32, 20 мар 2007.

Статус темы:
Закрыта.
  1. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    У меня уже нервов не хватает
    usOpenFileName юникод строка
    length длина строки , я приделываю ноль в конце так как уже отсюда идёт мусор.
    Код (Text):
    1. ...
    2. RtlInitUnicodeString(&usUpCase,usOpenFileName);
    3. usUpCase.Length = length/2;
    4. usUpCase.Buffer[usUpCase.Length] = (wchar_t)0;
    5. DbgPrint("FROM  : %ws",usUpCase.Buffer);
    6. RtlUpcaseUnicodeString(&usFileName,&usUpCase,TRUE);
    7. DbgPrint("TO : %ws",usFileName.Buffer);
    8. ....
    DbgPrint
    Код (Text):
    1. FROM  : Bootfont.bin
    2. TO : BOOTFO
    3. FROM  : Bootfont.bin
    4. TO : BOOTFO
    5. FROM  : CONFIG.SYS
    6. TO : CONFIO
    7. FROM  : CONFIG.SYS
    8. TO : CONFIO
    9. FROM  : CONFIG.SYS
    10. TO : CONFIO
    11. FROM  : Documents and Settings
    12. TO : DOCUMENTS A?aA???????
    13. FROM  : Documents and Settings
    14. TO : DOCUMENTS A
    15. FROM  : Documents and Settings
    16. TO : DOCUMENTS A?aA???????
    17. FROM  : driver
    18. TO : DRI??ANTS A
    19. FROM  : driver
    20. TO : DRIUMENTS A?aA???????
    21. FROM  : driver
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    зачем так делаешь. Length - длина строки в байтах, а не в юникод-символах... без учета нуля
    например для строки L"Hello" Length = 10

    Код
    полностью неверный.
    надо так:
    Код (Text):
    1. usUpCase.Length = length;
    2. usUpCase.Buffer[usUpCase.Length/2] = (wchar_t)0;
     
  3. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    Код (Text):
    1.         RtlInitUnicodeString(&usUpCase,usOpenFileName);
    2.         usUpCase.Buffer[length/2] = (wchar_t)0;
    3.         RtlInitUnicodeString(&usFileName,usOpenFileName);
    4.         DbgPrint("FROM  : %ws",usUpCase.Buffer);
    5.         RtlUpcaseUnicodeString(&usFileName,&usUpCase,TRUE);
    6.         usFileName.Length = length/2;
    7.         usFileName.Buffer[usFileName.Length] = (wchar_t)0;
    8.         DbgPrint("TO : %ws",usFileName.Buffer);
    тема закрыта
     
  4. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    length = ULONG
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    все равно ты чето не то химичишь с полем Length =)
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    главное, что пашет, а если пашет, лучше не троготь
     
  7. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    :) что правда то правда всем спасибо тема закрыта.
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    WIN32
    оффтоп:
    Сынуля папу-программиста спросил:
    -Папа, а почему солнышко утром встает, а утром спать ложица?
    -Каждый день встает?
    -Да,пап
    -Каждый день спать ложица?
    -Да пап
    -Ради бога сынуля,ничего не трогай, пусть работает!
     
Статус темы:
Закрыта.