The usage of COM_Invoke():

If it has the form in VBS-like scripts as
Code:
value = Object.Function(param1, param2, ...) ; Method, PropertyGet
it'll be translated like
Code:
value := COM_Invoke(Object, "Function", param1, param2, ...)


And, if
Code:
Object.Function(param1, param2, ...) = value ; PropertyPut, PropertyPutRef
then similarly with the above
Code:
COM_Invoke(Object, "Function", param1, param2, ..., value)
However, there exist occasions the above simple form becomes ambiguous. In those cases, can force it to use PropertyPut by appending to the function name the artificial suffix "=" like:
Code:
COM_Invoke(Object, "Function=", param1, param2, ..., value)


There are some occasions where another COM Object ObjPrm should be a parameter. In that case, prefix it with "+" like:
Code:
COM_Invoke(Object, "Function", ..., "+" . ObjPrm , ...) ; never directly prefix it like +ObjPrm.
As a consequence, "+0" will play the role of VBS Nothing.

And, "-0" will represent VBS missing parameter. For eample
Code:
Object.Function(..., param1, , param3, ...)
in VBS-like scripts can be written as
Code:
COM_Invoke(Object, "Function", ..., param1, "-0" , param3, ...)


Finally, to control the error message pop-up of COM Library, call
Code:
COM_Error(b) ; b := 0/1 for off/on