DirectInput - проблема

Тема в разделе "WASM.WIN32", создана пользователем Холод, 18 июл 2006.

  1. Холод

    Холод New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    42
    Не получается инициализировать DirectInput. Помогите, пожалуйста, очень надо.

    Код (Text):
    1. .DATA
    2. ;interfaces -----------------------------------------------------
    3. POINTER_INTERFACE_DIRECTINPUT8      DWORD       ?
    4. INTERFACE_DIRECTINPUT8 STRUCT
    5.     QueryInterface          DWORD       00000000h
    6.     AddRef              DWORD       00000004h
    7.     Release             DWORD       00000008h
    8.     CreateDevice            DWORD       0000000Ch
    9.     EnumDevices         DWORD       00000010h
    10.     GetDeviceStatus         DWORD       00000014h
    11.     RunControlPanel         DWORD       00000018h
    12.     Initialize          DWORD       0000001Ch
    13.     FindDevice          DWORD       00000020h
    14.     EnumDevicesBySemantics      DWORD       00000024h
    15.     ConfigureDevices        DWORD       00000028h
    16. INTERFACE_DIRECTINPUT8 ENDS
    17.  
    18. POINTER_INTERFACE_DIRECTINPUTDEVICE8    DWORD       ?
    19. INTERFACE_DIRECTINPUTDEVICE8 STRUCT
    20.     QueryInterface          DWORD       00000000h
    21.     AddRef              DWORD       00000004h
    22.     Release             DWORD       00000008h
    23.     GetCapabilities         DWORD       0000000Ch
    24.     EnumObjects         DWORD       00000010h
    25.     GetProperty         DWORD       00000014h
    26.     SetProperty         DWORD       00000018h
    27.     Acquire             DWORD       0000001Ch
    28.     Unacquire           DWORD       00000020h
    29.     GetDeviceState          DWORD       00000024h
    30.     GetDeviceData           DWORD       00000028h
    31.     SetDataFormat           DWORD       0000002Ch
    32. INTERFACE_DIRECTINPUTDEVICE8 ENDS
    33.  
    34. ;structures -----------------------------------------------------
    35. DIRECTINPUT_DATAFORMAT STRUCT
    36.     dwSize              DWORD       ?
    37.     dwObjSize           DWORD       ?
    38.     dwFlags             DWORD       ?
    39.     dwDataSize          DWORD       ?
    40.     dwNumObjs           DWORD       ?
    41.     rgodf               DWORD       ?
    42. DIRECTINPUT_DATAFORMAT ENDS
    43.  
    44. GUID_Key                GUID            <055728220h, 0D33Ch, 11CFh, <0BFh, 0C7h, 44h, 45h, 053h, 54h, 00h, 00h>>
    45. IID_IDIRECTINPUT8           GUID            <0BF798030h, 0483Ah, 4DA2h, <0AAh, 099h, 5Dh, 64h, 0EDh, 36h, 97h, 00h>>
    46. GUID_SYSKEYBOARD            GUID            <06F1D2B61h, 0D5A0h, 11CFh, <0BFh, 0C7h, 44h, 45h, 053h, 54h, 00h, 00h>>
    47.  
    48. _DIOBJECTDATAFORMAT STRUCT
    49.     pguid               DWORD           ?
    50.     dwOfs               DWORD           ?
    51.     dwType              DWORD           ?
    52.     dwFlags             DWORD           ?
    53. _DIOBJECTDATAFORMAT ENDS
    54.  
    55. _DIKEYBOARD             _DIOBJECTDATAFORMAT 256 DUP (<?>)
    56.  
    57. _DIDATAFORMAT STRUCT
    58.     dwSize              DWORD           24 ;size of _DIDATAFORMAT
    59.     dwObjSize           DWORD           16 ;size of _DIOBJECTDATAFORMAT
    60.     dwFlags             DWORD           00000002h ;DIDF_RELAXIS
    61.     dwDataSize          DWORD           256
    62.     dwNumObjs           DWORD           256
    63.     rgodf               DWORD           OFFSET _DIKEYBOARD
    64. _DIDATAFORMAT ENDS
    65.  
    66. .CODE
    67. ;get DIRECTINPUT8 interface
    68.             PUSH    0
    69.             PUSH    OFFSET POINTER_INTERFACE_DIRECTINPUT8
    70.             PUSH    OFFSET IID_IDIRECTINPUT8
    71.             PUSH    0800h ;DIRECTINPUT_VERSION
    72.             PUSH    WINDOW_CLASS.hInstance
    73.             CALL    ADDR_DirectInput8Create
    74.  
    75. ;get DIRECTINPUTDEVICE8 interface
    76.             PUSH    0
    77.             PUSH    OFFSET POINTER_INTERFACE_DIRECTINPUTDEVICE8
    78.             PUSH    OFFSET GUID_SYSKEYBOARD
    79.  
    80.             MOV EAX, POINTER_INTERFACE_DIRECTINPUT8
    81.             PUSH    EAX
    82.             MOV EAX, [EAX]
    83.             CALL    DWORD PTR [EAX + INTERFACE_DIRECTINPUT8.CreateDevice]
    84.  
    85. ;fill _DIKEYBOARD
    86.             MOV ESI, OFFSET _DIKEYBOARD + 4096 ;256 * 16
    87.             MOV ECX, 255
    88.  
    89. FILL_NEXT_ELEMENT:
    90.             SUB ESI, 4h
    91.             MOV EAX, 0h
    92.             MOV [ESI], EAX
    93.             SUB ESI, 4h
    94.             MOV EBX, ECX
    95.             SHL EBX, 8
    96.             OR  EBX, 8000000Ch
    97.             MOV [ESI], EBX
    98.             SUB ESI, 4h
    99.             MOV [ESI], ECX
    100.             SUB ESI, 4h
    101.             MOV [ESI], OFFSET GUID_Key
    102.             LOOP    FILL_NEXT_ELEMENT
    103.  
    104. ;set data format
    105.             PUSH    OFFSET _DIDATAFORMAT
    106.             MOV EAX, POINTER_INTERFACE_DIRECTINPUTDEVICE8
    107.             PUSH    EAX
    108.             MOV EAX, [EAX]
    109.     error >>>   CALL    DWORD PTR [EAX + INTERFACE_DIRECTINPUTDEVICE8.SetDataFormat]
    Почему возникает ошибка? Подскажите, добрые люди!
     
  2. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Манера плодить одинаковые топики в разных разделах не привествуется
     
  3. Холод

    Холод New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    42
    Дико извеняюсь