Netspirit писал(а):
там выполняется команда LEA, которая возвращает некий адресТочно - фигня какая-то
Нужен MOV, а не LEA
Щаз...
------------ Дoбавленo в 18.28:
Netspirit писал(а):
Другими словами, в CreateEvent передаётся не nil. Но на несколько инструкций оптимальней.1) Это мы поправим (кажется надо @_prop_Name[1] - проверю щаз). Будет MOV
2) Вызов подпрограммы (там тоже команд пять, наверное) - это вам не баб щупать. Это сброс конвейера дважды
Если не считать того, что MSDN, вроде бы, просит NULL... а Pchar как раз гарантирует обратное.
------------ Дoбавленo в 18.58:
Все понял. Надо вот так:
#pas
FEvent := CreateEvent(nil, Value, False, pointer(_prop_Name));
И тогда будет так:
.0040C5C8: 53 push ebx
.0040C5C9: 56 push esi
.0040C5CA: 8BDA mov ebx,edx
.0040C5CC: 8BF0 mov esi,eax
.0040C5CE: 8B4604 mov eax,[esi][04]
.0040C5D1: 85C0 test eax,eax
.0040C5D3: 7406 je .00040C5DB
.0040C5D5: 50 push eax
.0040C5D6: E81981FFFF call CloseHandle ;kernel32
.0040C5DB: 8B4614 mov eax,[esi][14]
.0040C5DE: 50 push eax
.0040C5DF: 6A00 push 000
.0040C5E1: F6DB neg bl
.0040C5E3: 1BC0 sbb eax,eax
.0040C5E5: 50 push eax
.0040C5E6: 6A00 push 000
.0040C5E8: E80F81FFFF call CreateEventA ;kernel32
.0040C5ED: 894604 mov [esi][04],eax
.0040C5F0: 5E pop esi
.0040C5F1: 5B pop ebx
.0040C5F2: C3 retn