Пожалуйста, обратите внимание, что пользователь заблокирован
Или у меня уже глюки, или как всегда, какая-то особенность винапи. Есть код
OutputDebugString падает неясно почему. Если закоментировать wsprintf, или хотя бы передавать туда не systime.wYear, а число вида 2000, то все гуд. В чем может быть проблема?
upd. Разобрался. Проблема как всегда была весьма тупая. SYSTEMTIME .wYear это WORD, т.е. занимает два байта, а масм после wsprintf выравнивает стек на 12 (3 параметра по DWORD), в итоге два байта лишние и все рушится. Если сделать так
То все норм. Тему не удаляю, мб еще кому пригодится (или решение не окончательное).
Код:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\macros\macros.asm
uselib kernel32,user32
.data
systime SYSTEMTIME <?>
buf db 64 dup (0)
buf2 db "some debug log",0
.code
start:
invoke GetSystemTime,addr systime
invoke wsprintf,addr buf,chr$("year is %hd"),systime.wYear
invoke OutputDebugString,offset buf2
exit;
end start
upd. Разобрался. Проблема как всегда была весьма тупая. SYSTEMTIME .wYear это WORD, т.е. занимает два байта, а масм после wsprintf выравнивает стек на 12 (3 параметра по DWORD), в итоге два байта лишние и все рушится. Если сделать так
Код:
movzx ebx,systime.wYear
invoke wsprintf,addr buf,chr$("year is %d"),ebx
