Initall commit
This commit is contained in:
53
fasmw172/INCLUDE/MACRO/COM32.INC
Normal file
53
fasmw172/INCLUDE/MACRO/COM32.INC
Normal file
@@ -0,0 +1,53 @@
|
||||
|
||||
; Macroinstructions for interfacing the COM (Component Object Model) classes
|
||||
|
||||
macro cominvk object,proc,[arg]
|
||||
{ common
|
||||
if ~ arg eq
|
||||
reverse
|
||||
pushd arg
|
||||
common
|
||||
end if
|
||||
assert defined object#.com.object ; must be a COM object
|
||||
mov eax,[object]
|
||||
push eax
|
||||
mov eax,[eax]
|
||||
call [eax+object#.#proc] }
|
||||
|
||||
macro comcall handle,interface,proc,[arg]
|
||||
{ common
|
||||
if ~ arg eq
|
||||
reverse
|
||||
pushd arg
|
||||
common
|
||||
end if
|
||||
assert defined interface#.com.interface ; must be a COM interface
|
||||
if handle eqtype eax | handle eqtype 0
|
||||
push handle
|
||||
local ..handle
|
||||
label ..handle at handle
|
||||
mov eax,[..handle]
|
||||
else
|
||||
mov eax,handle
|
||||
push eax
|
||||
mov eax,[eax]
|
||||
end if
|
||||
call [eax+interface#.#proc] }
|
||||
|
||||
macro interface name,[proc]
|
||||
{ common
|
||||
struc name \{
|
||||
match , @struct \\{ define field@struct .,name, \\}
|
||||
match no, @struct \\{ . dd ?
|
||||
virtual at 0
|
||||
forward
|
||||
.#proc dd ?
|
||||
common
|
||||
.\#\\.com.object = name#.com.interface
|
||||
end virtual \\} \}
|
||||
virtual at 0
|
||||
forward
|
||||
name#.#proc dd ?
|
||||
common
|
||||
name#.com.interface = $ shr 2
|
||||
end virtual }
|
||||
Reference in New Issue
Block a user