Mikl___ Спасибо =) , динамически я имел ввиде не макрос , так как текст будет вводится во время выполнения проги и всегда раззный. Лучший вариант тогда апи функция перевода , а потом перевод повторно с добавлением Слэша наверное
calidus Тогда лучший вариант у AsmGuru62 с добавлением Код (Text): %elif %%a > 127 DB %%a-0B0h,4 %else DW %%a для работы с кириллицей. А слэш и так бы обработался "\" -> db 5Ch,0
calidus а ты всё ещё не перешлифовал "5 коп" под то чтобы они вместо делания "псевдоуникода" слеш в анси добавляли? там же всё элементарно... Ну а затем скармливаешь результат MultiByteToWideChar с кодовой страницей CP_THREAD_ACP (родная для приложения) или GetACP(VOID); (родная для системы) и всё ок. Mikl___ речь не про макрос.....
=) нее , пока нет , выходной путь будет выходным , но идея ясна Спасиб. Проблема стояла в том что , нужно было через иоктл подавать всегда разную строку на инициализацию в драйвер , после этого файл не открывался потому что адрес не правильно переведен. Указатели на памяти верны , а вот со строкой всегда что то не то. Потом отпишусь.
Код (Text): @ansi2unicode macro xor eax, eax lodsb stosw test al, al jnz $-5 endm @unicode2ansi macro xor eax, eax lodsw stosb test al, al jnz $-5 endm Вот еще кому надо ) использование mov esi, offset ansiDll mov edi, offset unicodeDll @ansi2unicode
calidus Код (Text): @unicode2ansi macro xor eax, eax <-- для чего? lodsw stosb test al, al jnz $-5 endm
litrovith Куда уж конкретнее? calidus Всё равно ограничился псевдовариантом, ну дело твое... Кстати lods, stos конечно компактнее, но быстрее в данном случае разбить их на отдельные команды (хотя конечно это не принципиально).
=) не не это н мой вариант .. мой масивнее эти макросы мне дали просто Код (Text): invoke lstrlen,addr adwInBuffer mov ecx,eax lea esi,adwInBuffer lea edi,adwInBufferTMP @@: mov al,byte ptr [esi] cmp al,"\" jne @@Fow mov byte ptr [edi],al inc edi @@Fow: mov byte ptr [edi],al add edi,1 inc esi dec ecx jnz @B ;invoke MessageBox,0,addr adwInBufferTMP,addr Pr,MB_ICONQUESTION+MB_OK invoke lstrlen,addr adwInBufferTMP mov cchWideChar,eax invoke MultiByteToWideChar,CP_ACP,0,addr adwInBufferTMP,cchWideChar,addr adwInBufferW, sizeof adwInBufferW вот мой ...