i think most VARIANT structs are 4 DWORD's in size
a while back, we were playing with zip through iShellDispatch
i disassembled some C code and found that the VARIANT struct was passed in it's entirety (not a pointer to struct)
so for assembler, rather that trying to pass a VARIANT, i broke it up and passed 4 DWORD arguments
;IShellDispatch::NameSpace Folder object interface vTable (structure)
; vItem VARIANT struct = vtItem:DWORD,vI0:DWORD,vdwItem:DWORD,vIV0:DWORD
;vOptions VARIANT struct = vtOpt:DWORD,vO0:DWORD,vdwOpt:LPVOID,vOV0:DWORD
Folder STRUCT
IDispatch <>
METHOD(getTitle, _this:LPVOID,pbs:LPVOID)
METHOD(Application, _this:LPVOID,ppid:LPVOID)
METHOD(Parent, _this:LPVOID,ppid:LPVOID)
METHOD(ParentFolder, _this:LPVOID,ppsf:LPVOID)
METHOD(Items, _this:LPVOID,ppid:LPVOID)
METHOD(ParseName, _this:LPVOID,bstrName:LPVOID,ppid:LPVOID)
METHOD(NewFolder, _this:LPVOID,bstrName:LPVOID,vtOpt:DWORD,vO0:DWORD,vdwOpt:LPVOID,vOV0:DWORD)
METHOD(MoveHere, _this:LPVOID,vtItem:DWORD,vI0:DWORD,vdwItem:DWORD,vIV0:DWORD,vtOpt:DWORD,vO0:DWORD,vdwOpt:LPVOID,vOV0:DWORD)
METHOD(CopyHere, _this:LPVOID,vtItem:DWORD,vI0:DWORD,vdwItem:DWORD,vIV0:DWORD,vtOpt:DWORD,vO0:DWORD,vdwOpt:LPVOID,vOV0:DWORD)
METHOD(GetDetailsOf, _this:LPVOID,vtItem:DWORD,vI0:DWORD,vdwItem:DWORD,vIV0:DWORD,iColumn:DWORD,pbs:LPVOID)
Folder ENDS