unknwn.inc
来自「工欲善其事」· INC 代码 · 共 87 行
INC
87 行
;-------------------------------------------------------------------
;*** 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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?