WndClass WNDCLASSEX {cbSize=sizeof WNDCLASSEX,
style=0,
lpfnWndProc=WindowProc,
cbClsExtra=?,
cbWndExtra=?,
hInstance=?,
hIcon=0,
hCursor=0,
hbrBackground=0,
lpszMenuName=0,
lpszClassName=offset WndClassName,
hIconSm=?}
[Asm] Про структуры и libы
1) Что здесь может быть неправильно? \ в конце строк не помогают.
MASM 6.14: error A2186: extra characters in literal initialization
Код:
2) Мне нужна функция SetLayeredWindowAttributes, в inc файлах она есть, а в lib'ах нет (либы не из этого дистрибутива). Т.е. в user32.lib есть более старые функции, а этой нет. Как бы прогу сассемблировать? Или лучше сразу lib'ы новые скачать?
обычно всё это делается так:
Код:
wc WNDCLASS <?> ; структура класса
.......
Mov [wc.style], CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
; устанавливаем стиль окна
Mov [wc.lpfnWndProc], offset WndProc ;
Mov [wc.cbClsExtra], 0
Mov [wc.cbWndExtra], 0
Mov eax, [hInst]
Mov [wc.hInstance], eax
Invoke LoadIcon,0,IDI_APPLICATION ; получаем значок приложения по
; умолчанию
Mov [wc.hIcon], eax
Invoke LoadCursorA,0,IDC_ARROW ; получаем курсор по умолчанию
Mov [wc.hCursor], eax
Mov [wc.hbrBackground], COLOR_BACKGROUND+1
Mov dword ptr [wc.lpszMenuName], 0
Mov dword ptr [wc.lpszClassName], offset szClassName ; задаём имя класса
;окна
Invoke RegisterClassA,offset wc ; регистрируем класс окна
.......
Mov [wc.style], CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
; устанавливаем стиль окна
Mov [wc.lpfnWndProc], offset WndProc ;
Mov [wc.cbClsExtra], 0
Mov [wc.cbWndExtra], 0
Mov eax, [hInst]
Mov [wc.hInstance], eax
Invoke LoadIcon,0,IDI_APPLICATION ; получаем значок приложения по
; умолчанию
Mov [wc.hIcon], eax
Invoke LoadCursorA,0,IDC_ARROW ; получаем курсор по умолчанию
Mov [wc.hCursor], eax
Mov [wc.hbrBackground], COLOR_BACKGROUND+1
Mov dword ptr [wc.lpszMenuName], 0
Mov dword ptr [wc.lpszClassName], offset szClassName ; задаём имя класса
;окна
Invoke RegisterClassA,offset wc ; регистрируем класс окна
2. Импортируй эту функцию динамически через LoadLibrary и GetProcAddress
2. А статически никак? Нельзя 2 lib'ы для 1 dll'ки?
Спасибо за ссылки. Но к таким dll, как kernel и user, новые lib'ы можно скачать, наверное, хотя я не искал. Меня больше интересует, можно ли как-нибудь сделать статический импорт, используя несколько lib файлов для 1 dll? Наверное, нельзя, ну а вдруг я просто не знаю?
MASM идет с VisualStudio, *.lib можно взять там.
Ладно, со вторым вопросом разобрался. А как инициализировать структуры? Искал в Инете - вроде у меня так же. Но почему-то не ассемблируется.
допустим структура содержит два поля x и y, то пишется так
Код:
struct1 tstruct <12,13>
struct1.x будет равен 12, а struct1.y будет равен 13
аналогично и в твоём случае со структурой WNDCLASSEX
При инициализации не надо писать field=value, а надо просто value. Скобки при этом можно любые (как угловые, так и фигурные), обрыв строки без \ можно ставить после запятой, но при этом есть 1 глюк masm'а.