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 + -
显示快捷键?