Win32ASM Hello World и три халявы MASM32



d8ef8794

Задача 5


. ...зато есть функции WriteConsoleA и WriteConsoleW. "A" - это если вы хотите напечатать строку в формате ASCII (т.е. каждый знак занимает один байт), а "W" - если в Unicode (W - от wide, широкий. В Unicode знаки не 8-битные, а 16-битные, и занимают два байта). Подобные окончания имеют только те функции, которые тем или иным образом работают со строковыми значениями. Функция ExitProcess, например, подобного буквенного окончания не имеет - посудите сами, не все ли равно, на каком национальном языке завершать работу приложения?
  Откроем файл kernel32.inc и пристально посмотрим на его содержимое, в частности, на следующее: WriteConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD WriteConsole equ <WriteConsoleA>

  Как видим, команда разработчиков MASM32 позаботилась не только о простыне прототипов, но и о "независимости" нашего исходника от выбранной кодировки. То есть для того, чтобы "перезаточить" программу под UNICODE, нам вовсе не нужно заменять окончание A на W в имени функции. Достаточно просто приинклюдить другой файл с прототипами и эквивалентами наподобие WriteConsoleW PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD WriteConsole equ <WriteConsoleW>

и не "париться" с переписыванием исходника.
  Надо отметить, в MASM32 подобного "юникодного" инклуда нет, однако вы легко можете сделать его сами.

 




Содержание  Назад  Вперед