COM в Ассемблере
Страница 4. Использование COM в MASM


 

Использование COM в MASM

Если вы используете MASM для ассемблирования ваших программ, вы можете использовать некоторые из его возможностей, чтобы сделать вызов COM-функций очень простым. Используя invoke, вы можете сделать COM-вызовы почти такими же понятными как вызовы обычных функций, плюс вы можете добавить проверку типов для каждой функции.

Определение интерфейса:

      IInterface_Function1Proto     typedef proto :DWORD
      IInterface_Function2Proto     typedef proto :DWORD, :DWORD

      IInterface_Function1          typedef ptr IInterface_Function1Proto
      IInterface_Function2          typedef ptr IInterface_Function2Proto

      IInterface struct DWORD
            QueryInterface          IUnknown_QueryInterface         ?
            AddRef                  IUnknown_AddRef                 ?
            Release                 IUnknown_Release                ?
            Function1               IInterface_Function1            ?
            Function2               Interface_Function2             ?
      IInterface ends

Использование интерфейса для вызова COM-функций:

      mov     eax, pObject
      mov     eax, [eax]
      invoke  (IInterface [eax]).Function1, 0, 0

Как вы можете видеть, синтакс может выглядеть немного странно, но это дает возможность использовать имя функции вместо смещений, а заодно и проверку типов.

 
Следующая статья »