Удобный макрос для заполнения информационной
{ \
_asm MOV [stRegState.dwEAX], EAX /* Сохранить значение EAX. */\
_asm MOV [stRegState.dwEBX], EBX /* Сохранить значение ЕВХ. */\
_asm MOV [stRegState.dwECX], ECX /* Сохранить значение ЕСХ. */\
_asm MOV [stRegState.dwEDX], EDX /* Сохранить значение EDX. */\
_asm MOV [stRegState.dwEDI], EDI /* Сохранить значение EDI. */\
_asm MOV [stRegState.dwESI], ESI /* Сохранить значение ESI. */\
_asm XOR . EAX, EAX /* Обнулить ЕАХ. */\
_asm LAHF /* в АН.*/\
_asm MOV [stRegState.dwEFL], EAX /* Загрузить значение флажков. */\
} \
dwLastError = GetLastError (); /* Сохранить значение последней */\
/* ошибки. */\
{ \
_asm MOV EAX, [stRegState.dwEAX] /* Восстановить ЕАХ */\
/* к его исходному значению. */\
/* Установить возвращаемое */\
/* значение для информации. */\
_asm MOV [stEvtlnfo.dwRetValue] , ЕАХ \
}
/*////////////////////////////////////////////////////////////
Удобный макрос для заполнения информационной структуры события
/////////////////////////////////////////////////////////////////*/
#define FILL__EVENTINFO(eFn) \
stEvtlnfo.eFunc = eFn ; \
stEvtlnfo.ePrePost = ePostCall; \
stEvtlnfo.dwThreadld = GetCurrentThreadld ()
/*///////////////////////////////////////////////////////////////
Объявление для всех DD_*-определений
////////////////////////////////////////////////////////////////*/
#define NAKEDDEF _declspec(naked)
/*///////////////////////////////////////////////////////////////
БОЛЬШОЕ ПРИМЕЧАНИЕ
Все следующие прототипы похожи на cdecl-функции. Но это не так — все они
stdcall-функции! Заказной пролог и эпилог гарантируют, что используется
правильное соглашение о вызовах!
////////////////////////////////////////////////////////////////*/
////////////////////////////////////////////////////////////////*/
// Обязательные функции, которые должны быть перехвачены, чтобы выполнить
// системную работу
HMODULE DD_LoadLibraryA ( LPCSTR IpLibFileName);
Содержание Назад Вперед