И снова здрастье На сей раз у меня нехотят ставяцца мутексы... Код (Text): .code start: Call Mutex Mutex proc LOCAL hMutex: dword invoke CreateMutex, 0,0,0 mov hMutex, eax invoke GetLastError .IF eax==0 invoke MessageBox, NULL, addr MsgBoxText2, addr MsgBoxCaption2, MB_OK ;Мутекс поставился .ELSE invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK ; Мутекс уже стоит .ENDIF ret Mutex endp И мне всегда сообщается что мутекс поставился. Хотя в системе он стоит :\ Как решить траблу?
охренет, нафик проверят по GetLastError? В случаи успеха WinAPI обычно не высталяют ERROR_SUCCESSED, а ясно дело сохраняется ошибка от какойто придыдущей апи, которая вылетела с ошибкой. К GetLastError нужно обрашаться в случаи возврата ошибки прочими WinAPI. Надо смотреть eax от CreateMutex.
djmans В общем Вы правы, конечно, но AFAIK вот это: таки неверно. Чаще ERROR_SUCCESSED всё-таки выставляется, чем не выставляется. Но далеко не всегда. tagegor MSDN читать надо, прежде чем использовать ф-ию. И обсуждалось это тоже: http://www.wasm.ru/forum/viewtopic.php?pid=284936#p284936 http://www.wasm.ru/forum/viewtopic.php?pid=280690#p280690 Так что не важно, укажете Вы там имя или нет: ошибки быть не должно ни в том, ни в другом случае.
djmans Наверное Вы всё-таки правы. Таки заглянул в MSDN: Говорят, что большинство таки не выставляют код ошибки, если завершаются успешно.
И вообше. это с чего вдруг? может нужно высавить условие (eax == ERROR_ALREADY_EXISTS)? а то если прав нету или памяти нету или инкорет параметры, это не значит что "Мутекс уже стоит"