· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Кодировка UNICODE и ASCII

Посл.отвђт Сообщенiе


Дата: Окт 12, 2004 12:31:15

Помогите Пожалуйста из строки UNICODE получить ASCII, из ASCII в UNICODE есть макрос


Дата: Окт 14, 2004 03:41:51

Dima
WideCharToMultiByte?


Дата: Окт 15, 2004 10:23:48

Спосибо за ответ q_q.
Извени я не полностью раскрыл вопрос, на том этапе мне казалась проблема в кодировке, но время идет :). Собственно UNICODE возвращается после отработки NetQueryDisplayInformation в системный буфер, и тут начинаются кракозябли.Я эту функцию использую для просмотра сети, уровень устанавливаю 2, возвращается структура, .usri2_name не получается отобразить "нормально"

Макрос:
UNITOASCII MACRO STRINGADD1,STRINGADD2
push edx
push ecx
mov ecx,STRINGADD1
mov edx,STRINGADD2
@@:
mov ax,WORD PTR [ecx]
mov [edx],al
add edx,1
add ecx,2

cmp ax,0
jne @b

pop ecx
pop edx
ENDM

Вызов из секции кода: UNITOASCII offset UnicodeString,offset Buffer


Дата: Окт 15, 2004 10:47:01 · Поправил: q_q

Dima
Расшифруй термин отобразить. На экране?

Твоего кода не достаточно, т.к. не видно описания/определния UnicodeString и Buffer.

Ты уверен, что NetQueryDisplayInformation отрабатывает успешно?

Imho макрос - "нехороший", я использую
WideCharToChar
    mov   eax,[esp+04h]	;; адрес UNICODE-строки
    push  eax
    push  -1
    push  eax
    call  IsBadStringPtrW
    or    eax,eax
    pop   eax
    jnz   short @1
    push  eax
    call  lstrlenW
    inc   eax
    jz    short @2
    push  eax
    push  eax
    push  40h		;; GMEM_FIXED or GMEM_ZEROINIT
    call  GlobalAlloc
    pop   ecx
    or    eax,eax
    jz    short @2
    mov   edx,[esp+04h]
    push  eax
    push  0
    push  0
    push  ecx
    push  eax
    push  -1
    push  edx
    push  0
    push  CP_ACP
    call  WideCharToMultiByte
    or    eax,eax
    pop   eax
    jnz   short @2
    push  eax
    call  GlobalFree
@1: xor   eax,eax
@2: ret   4
WideCharToChar endp


Дата: Окт 15, 2004 18:20:26

Согласен, твой код лучше.
NetQueryDisplayInformation отрабатывает правильно т.к. получаю ошибку ERROR_MORE_DATA и дальше у меня проблемы с пониманием извлечения структуры NET_DISPLAY_...,в программе на С это очень просто(пример в MSDN-> NetQueryDisplayInformation тоько он карявый, рабочий есть по NetServerEnum)в обоих случаях они объявляют 2структуры NET_DISPLAY_GROUP(SERVER_INFO_101) и копируют адрес(?) полученный в другую структуру, это получается, не получается вывести на дисплэй имена компьютеров(или вообще к ним добраться выводит что-то типа ??";№ - чёрти что)


Дата: Окт 16, 2004 18:57:56 · Поправил: KiNDeR

А что мешает читать в буфер вимволы через один? 1,3,5...,n пока не встретишь нулевое слово, т.е. два байта нулей...
...
...
Или вообще для "отображения" использовать UNICODE функции?


Дата: Окт 16, 2004 19:07:35

> Или вообще для "отображения" использовать UNICODE функции?

Ага, особенно в 9x =)


Дата: Окт 16, 2004 19:21:11

> Ага, особенно в 9x =)
А что в 9х нет функции MessageBoxU или SetWindowTextU?


Дата: Окт 16, 2004 19:56:40

> или SetWindowTextU?

Этой точно нет.
А юникодовая MessageBox в 9х сводится к ASCII варианту после преобразования строк.


Дата: Окт 16, 2004 22:29:57

Зато в 9х есть TextOutW.


Дата: Окт 18, 2004 07:33:52

Dima
не получается вывести на дисплэй
Если что-то не получается, то покажи код.

Про вывод для GUI-app написали. В аттаче смотри про вывод для CON-app.


_444456153__demoNQDIA.rar


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.076