Задумал написать простенькую гейму (это будет моя первая, на которую смотреть не противно будет, я надеюсь), раньше писал на Це++, потом перешел на асм, а в includ'e только DirectDraw 2 версии(я пробовал сам переделать, но что-то трещит внутри и нихрена не работает), нужны определения интерфейсов DirectInput, DirectSound, и DirectDraw(желательно 7)
А почему при такой бадяге MASM выдает кучу ошибок вида SyntaxError:имя метода? .586 .model flat,stdcall option casemap :none .nolist .nocref include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\gdi32.inc .list .cref includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\ddraw.lib includelib \masm32\lib\dxguid.lib include \masm32\include\ddraw.inc include \masm32\include\ddraw7.inc
добавил UNKNWN.inc : ;------------------------------------------------------------------- ;*** vf macro: use "invoke vf(pInterface,Interface,Function)<,arguments> vf macro this:req,ifvt,func:req local reg reg equ <edx> ifidni <this>,<edx> reg equ <ecx> endif mov reg,this mov reg,[reg].ifvt.pVtbl exitm <[reg].&ifvt&Vtbl.&func&,this> endm ;------------------------------------------------------------------- ;*** Interface definition macros: start_interface, end_interface, mvbr start_interface macro name ?Interface equ <name> &name&Vtbl struct endm end_interface macro local structname,vtblptr,vtbldef structname catstr ?Interface,<Vtbl ends> vtblptr catstr <p>,?Interface,<Vtbl typedef ptr >,?Interface,<Vtbl> vtbldef catstr <pVtbl p>,?Interface,<Vtbl ?> structname vtblptr ?Interface struct vtbldef ?Interface ends ?Interface equ <> endm STDMETHOD macro name:req,arguments:VARARG local prototype,pointer,function ifnb <arguments> prototype catstr ?Interface,<_>,<name>,< typedef proto :ptr,arguments> else prototype catstr ?Interface,<_>,<name>,< typedef proto :ptr> endif pointer catstr <p>,?Interface,<_>,<name>,< typedef ptr >,?Interface,<_>,<name> function catstr <name>,< p>,?Interface,<_>,<name>,< ?> prototype pointer function endm ;------------------------------------------------------------------- ;*** definition IUnknown externdef c IID_IUnknown:ptr IID start_interface IUnknown STDMETHOD QueryInterface ,:ptr IID,:ptr ptr STDMETHOD AddRef STDMETHOD Release end_interface pIUnknown typedef ptr IUnknown ;------------------------------------------------------------------- ;*** definition IClassFactory externdef c IID_IClassFactory:ptr IID start_interface IClassFactory STDMETHOD QueryInterface ,:ptr IID,:ptr ptr STDMETHOD AddRef STDMETHOD Release STDMETHOD CreateInstance ,:ptr,:ptr IID,:ptr ptr STDMETHOD LockServer ,:dword end_interface ;*** end of file ошибка поменялась на: conflict parameter definition
хм.. видимо дело в макросах вызывающих COM методы. вот пример использования этих инклудов, может поможет чем (хотя это больше похоже на пример как делать не нужно =))