Вчера задумался и понял, что надоело в инклюдах видеть: db dd dq, rb и т.д. Так или иначе берутся со студии хидеры и перерабатываются. Смотрится размер того же HANDLE или TCHAR и потом проставляются dd db dw и т.д. Кто-то пробывал от этого уходить, в сторону символьных переменных ? Если да, то коим образом ? Да и вообще хотелось бы слышать Ваше мнение относительно того, целесообразно это или нет
Можно также через директиву EQU. Создаём файл WinApiTypes.Inc: Код (Text): if TCHAR_SIZE=1 TCHARS equ rb endif if TCHAR_SIZE=2 TCHARS equ rw endif OBJREF equ dd HBITMAP equ dd PTCHAR equ dd ; ... and so on ... И далее пользуем (): Код (Text): ; ; Comment out one of these ; TCHAR_SIZE=2 ; UNICODE TCHAR_SIZE=1 ; ANSI include 'WinApiTypes.Inc' ... virtual at 0 TApplication: .Path TCHARS MAX_PATH .Bitmap HBITMAP ? .Object OBJREF ? .size = $ end virtual
Вообще, по-моему, правильнее в fasm определять свои типы с помощью struc: Код (Text): struc HANDLE [value] { common . dd value } ... hWnd HANDLE ? hWndArray HANDLE 10 dup (?)
Зачем умножать сущностей? HANDLE, (как и многие другие) и есть двойное слово. FASM тем и хорош, что называет вещи собственными именами. Это делает программа лучше и понятнее. А если реальность так надоела, всегда можно переходить на C.