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

 WASM Phorum —› WASM.WIN32 —› Build Unicode App

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


Дата: Янв 26, 2004 17:57:56

Как сделать сабж в масме?
Вроде пустяшный вопрос.
Я пытался найти по форуму - без результатно.


Дата: Янв 26, 2004 20:28:57

Если код проекта уже написан - трудненько будет, однако...
Заменить надо все вызовы Win32 API с 'A' в конце на имена с 'W' в конце. А это всё, что принимает LPTSTR. Есть и исключения. Например: SendMessage(). Затем, все текстовые константы и буфера должны быть переделаны с DB на DW или загружены из ресурсов через LoadStringW().


Дата: Янв 27, 2004 03:13:36

И всё?
Я то думал, какую-нибудь директиву можно вписать и скормить компилятору.
А может по этому поводу плаг сделать для RadASM-а?


Дата: Янв 27, 2004 07:07:50

Ну, в принципе, если подходить серьёзно, то надо поиметь макро-библиотеку для такого дела и когда делаем новую разработку - сразу писать код, который скомпилируется для обеих режимов: UNICODE и ANSI. Пример такого макро (TASM32):
AW_Api macro api_name
 IFDEF UNICODE
  api_name textequ <api_name&W>
  extrn api_name : proc
 ELSE
  api_name textequ <api_name&A>
  extrn api_name : proc
 ENDIF
endm

Теперь использовать это как показано ниже:
AW_Api GetWindowText

.code
call    GetWindowText

Если при компиляции указать /dUNICODE, то TASM произведёт подставление A или W автоматически.


Дата: Янв 27, 2004 19:43:55

Но вопрос в следующем:
Разница между прогами лишь в используемых версиях функций и представлении строк? Ну ещё размеры строк менять, да?


Дата: Янв 27, 2004 20:30:23

В общем, да.
---
А что имеется в виду под размерами строк?
Размер буфера должен быть вдвое больше для UNICODE.
А если говорить о длине строки, то она неизменна.
---
lstrlenA ("Hello"); // ANSI
lstrlenW (L"Hello"); // UNICODE

---
Результат в обеих случаях - 5 символов.
---
И конечно же, программа, будет более оптимизирована для конкретной системы. В Win9x, например, все строчные операции будут ANSI. А WinNT, 2000, XP - UNICODE. Это значит (теоретически), что ANSI EXE будет лучше выполняться на Win9x, а UNICODE EXE - на WinNT, 2000, XP.


Дата: Янв 28, 2004 13:22:36
Правка

AsmGuru62
Результат в обеих случаях - 5 символов
5 символов!
Но количество байт будет ведь разным?

А вообще - я использую шаблон (см. Аттач) и стараюсь уже при разработке учитывать работу и для ANSI, и для Unicode.
Правда, сложно это в masm32, т.к. те, кто писал windows.inc и проч. не учитывали это. Приходится писать свои скрипты для приведения заголовочных файлов к такому виду, как в MS VC.

2076981980__DialogAsMainExU.tpl


Дата: Янв 28, 2004 13:29:08

IceStudent
Я давно решил эту проблемму.
Смотри в инструменты.

Правда чтобы мой набор INC работал, нужно убрать STDCALL, и добавить его в windows.inc


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