Приведение типов в ассемблере

Тема в разделе "WASM.BEGINNERS", создана пользователем GRIENDERS, 27 июл 2008.

  1. GRIENDERS

    GRIENDERS New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2008
    Сообщения:
    8
    Есть функция обратного вызова

    Код (Text):
    1. LowKeyboardProcedure proc code :dword, wparam:dword, lparam: dword
    2.  
    3.     local hookInfo: KBDLLHOOKSTRUCT
    4.    
    5.      ;…
    6.      ;…
    7. LowKeyboardProcedure endp
    В параметре lparam передается указатель на структуру KBDLLHOOKSTRUCT, которая выглядит так:

    Код (Text):
    1. KBDLLHOOKSTRUCT struct
    2.     vkCode dw ?
    3.     scanCode dw ?
    4.     flags dw ?
    5.     time dw ?
    6.     extraInfo dw ?
    7. KBDLLHOOKSTRUCT ends
    Как теперь добраться до полей этой структуры, предварительно преобразовав параметр lparam (он является указателем на нее) к структуре KBDLLHOOKSTRUCT ?

    В нотации С++ это бы выглядело так:

    Код (Text):
    1. LRESULT CALLBACK LowKeyboardProcedure (int code,int  wparam, int lparam)
    2. {
    3.  
    4.     //Вот это надо перевести на асм
    5.  
    6. KBDLLHOOKSTRUCT*    hookInfo = (KBDLLHOOKSTRUCT*)lparam;
    7.     int a = hookInfo-> vkCode;
    8.    
    9. ////////////////////////////////////////////////////
    10. }
     
  2. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    mov esi, lparam
    assume esi: KBDLLHOOKSTRUCT
    mov ax, [esi].vkCode

    или сразу:
    mov ax, (KBDLLHOOKSTRUCT ptr [esi]).vkCode

    вроде так ))
     
  3. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    ^ Прав. assume гляди
     
  4. GRIENDERS

    GRIENDERS New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2008
    Сообщения:
    8
    Stub, спасибо попробую.