Показать сообщение отдельно
Старый 09.06.2011, 10:37   #2
Пользователь
 
Регистрация: 19.07.2010
Сообщений: 45
Сказал Спасибо: 10
Имеет 23 спасибок в 12 сообщенях
Guzh пока неопределено
По умолчанию

Цитата:
Сообщение от maxilam Посмотреть сообщение
...
Или, если быть точнее, как работать с классом L2ParamStack?
...
Я обычно работаю так:
Адреса процедур:
Код:
    AdrL2StackCreate:=adrProc('core.dll','??0L2ParamStack@@QAE@H@Z');
    AdrL2StackClear :=adrProc('core.dll','?Clear@L2ParamStack@@QAEXXZ');
    AdrL2StackPushBack:=adrProc('core.dll','?PushBack@L2ParamStack@@QAEHPA_W@Z');  //freya ?PushBack@L2ParamStack@@QAEHPAG@Z
    AdrL2StackTop :=adrProc('core.dll','?Top@L2ParamStack@@QAE_JXZ');    //?Top@L2ParamStack@@QAEPAXXZ
    AdrL2StackFree :=adrProc('core.dll','??1L2ParamStack@@QAE@XZ');
Вызов:
Код:
    procedure l2stackCreate;            //создать стек параметров
    asm
                push    ecx
                mov     ecx, UnKnown
                push    0Ah
                call    AdrL2StackCreate
                pop     ecx
    end;
  procedure  L2StackPushBack; //положить параметр в стек параметров
 begin
    asm
                 mov ecx,param
                 push ecx
                 mov     ecx, UnKnown
                 call    AdrL2StackPushBack

    end;
...
Пример работы:
Код:
    asm
        call l2stackcreate
        call l2stackclear


        mov eax, ObjectID
        mov param,eax
        call L2StackPushBack

        mov eax, 0
        mov param,eax
        call L2StackPushBack

        call l2useItem

        call l2stackfree
    end;

Последний раз редактировалось Guzh, 09.06.2011 в 10:42.
Guzh вне форума   Ответить с цитированием
За это сообщение Guzh нажился 6 спасибками от: