11#cs ----------------------------------------------------------------------------
22 AutoIt Version : 3.3.14.2
33 Author.........: genius257
4- Version........: 0.1.1
4+ Version........: 0.1.2
55#ce ----------------------------------------------------------------------------
66
77#include-once
@@ -16,9 +16,22 @@ Global Const $DISPATCH_PROPERTYGET = 2
1616Global Const $DISPATCH_PROPERTYPUT = 4
1717Global Const $DISPATCH_PROPERTYPUTREF = 8
1818
19+ Global Const $DISP_E_UNKNOWNINTERFACE = 0x80020001
1920Global Const $DISP_E_MEMBERNOTFOUND = 0x80020003
21+ Global Const $DISP_E_PARAMNOTFOUND = 0x80020004
22+ Global Const $DISP_E_TYPEMISMATCH = 0x80020005
2023Global Const $DISP_E_UNKNOWNNAME = 0x80020006
24+ Global Const $DISP_E_NONAMEDARGS = 0x80020007
2125Global Const $DISP_E_BADVARTYPE = 0x80020008
26+ Global Const $DISP_E_EXCEPTION = 0x80020009
27+ Global Const $DISP_E_OVERFLOW = 0x8002000A
28+ Global Const $DISP_E_BADINDEX = 0x8002000B
29+ Global Const $DISP_E_UNKNOWNLCID = 0x8002000C
30+ Global Const $DISP_E_ARRAYISLOCKED = 0x8002000D
31+ Global Const $DISP_E_BADPARAMCOUNT = 0x8002000E
32+ Global Const $DISP_E_PARAMNOTOPTIONAL = 0x8002000F
33+ Global Const $DISP_E_BADCALLEE = 0x80020010
34+ Global Const $DISP_E_NOTACOLLECTION = 0x80020011
2235
2336Global Const $tagVARIANT = " ushort vt;ushort r1;ushort r2;ushort r3;uint64 data"
2437Global Const $tagDISPPARAMS = " ptr rgvargs;ptr rgdispidNamedArgs;dword cArgs;dword cNamedArgs;"
@@ -188,6 +201,9 @@ Func GetIDsOfNames($pSelf, $riid, $rgszNames, $cNames, $lcid, $rgDispId)
188201 ElseIf DllStructGetData ($t_rgszNames , 1 )== " __defineSetter" Then
189202 DllStructSetData ($tIds , 1 , - 3 )
190203 Return $S_OK
204+ ElseIf DllStructGetData ($t_rgszNames , 1 )== " __defineMethod" Then
205+ DllStructSetData ($tIds , 1 , - 4 )
206+ Return $S_OK
191207 EndIf
192208
193209 Local $iID = - 1
@@ -260,11 +276,12 @@ Func Invoke($pSelf, $dispIdMember, $riid, $lcid, $wFlags, $pDispParams, $pVarRes
260276 If $dispIdMember = - 1 Then Return $DISP_E_MEMBERNOTFOUND
261277 Local $tVARIANT , $_tVARIANT , $tDISPPARAMS
262278 Local $t
279+ Local $i
263280
264281 Local $pProperty = DllStructGetData (DllStructCreate (" ptr" , $pSelf + DllStructGetSize (DllStructCreate (" ptr Object;ptr Methods[7];int_ptr Callbacks[7]" ))),1 )
265282 Local $tProperty = DllStructCreate ($tagProperty , $pProperty )
266283
267- If ($dispIdMember = - 2 ) Or ($dispIdMember = - 3 ) Then
284+ If ($dispIdMember = - 2 ) Or ($dispIdMember = - 3 ) Or ( $dispIdMember = - 4 ) Then
268285 $tDISPPARAMS = DllStructCreate ($tagDISPPARAMS , $pDispParams )
269286 $t = DllStructCreate (" ptr id_ptr;long id;ptr str_ptr_ptr;ptr str_ptr" )
270287 DllStructSetData ($t , " id_ptr" , DllStructGetPtr ($t , 2 ))
@@ -282,6 +299,12 @@ Func Invoke($pSelf, $dispIdMember, $riid, $lcid, $wFlags, $pDispParams, $pVarRes
282299 $pProperty = $tProperty .Next
283300 $tProperty = DllStructCreate ($tagProperty , $pProperty )
284301 Next
302+ If ($dispIdMember = - 4 ) Then
303+ $_tVARIANT = DllStructCreate ($tagVARIANT , $tProperty .Variant)
304+ $_tVARIANT .vt = $VT_RECORD
305+ $_tVARIANT .data = _WinAPI_CreateString(DllStructGetData (DllStructCreate (" WCHAR[" & _WinAPI_StrLen($tVARIANT .data, True )& " ]" , $tVARIANT .data), 1 ))
306+ Return $S_OK
307+ EndIf
285308 If Not ($tVARIANT .vt = $VT_I4 ) Then Return $DISP_E_BADVARTYPE ; $VT_I4 should be the type returned from DllCallbackRegister
286309 If ($dispIdMember = - 2 ) Then $tProperty .__getter = $tVARIANT .data
287310 If ($dispIdMember = - 3 ) Then $tProperty .__setter = $tVARIANT .data
@@ -322,6 +345,35 @@ Func Invoke($pSelf, $dispIdMember, $riid, $lcid, $wFlags, $pDispParams, $pVarRes
322345 $_tVARIANT .vt = $__tVARIANT .vt
323346 $_tVARIANT .data = $__tVARIANT .data
324347 EndIf
348+ Return $S_OK
349+ ElseIf $tVARIANT .vt = $VT_RECORD Then
350+ $_tVARIANT .vt = $VT_BSTR
351+ $_tVARIANT .data = $tVARIANT .data
352+
353+ Local $oIDispatch = __IDispatch()
354+ $oIDispatch .a = 0
355+ Local $tDISPPARAMS = DllStructCreate ($tagDISPPARAMS , $pDispParams )
356+ Local $aArgs [$tDISPPARAMS .cArgs+ 1 ]
357+ Local $iSize = DllStructGetSize (DllStructCreate ($tagVARIANT ))
358+
359+ Local $tPtr = DllStructCreate (" ptr ptr" )
360+ $tPtr .ptr = $oIDispatch
361+ Local $__tIDispatch = DllStructCreate (" ptr Object;ptr Methods[7];int_ptr Callbacks[7];ptr Properties" , $tPtr .ptr )
362+ Local $__tProperty = DllStructCreate ($tagProperty , $__tIDispatch .Properties)
363+ Local $__tVARIANT = DllStructCreate ($tagVARIANT , $__tProperty .VARIANT)
364+
365+ $aArgs [0 ]= " CallArgArray"
366+ For $i = $tDISPPARAMS .cArgs To 1 Step - 1
367+ $tVARIANT = DllStructCreate ($tagVARIANT , $tDISPPARAMS .rgvargs+ $iSize * ($i - 1 ))
368+ $__tVARIANT .vt = $tVARIANT .vt
369+ $__tVARIANT .data = $tVARIANT .data
370+ $aArgs [$tDISPPARAMS .cArgs- $i + 1 ] = $oIDispatch .a
371+ Next
372+ $oIDispatch .a = Call (DllStructGetData (DllStructCreate (" WCHAR[" & _WinAPI_StrLen($_tVARIANT .data, True )& " ]" , $_tVARIANT .data), 1 ), $aArgs )
373+
374+ $_tVARIANT .vt = $__tVARIANT .vt
375+ $_tVARIANT .data = $__tVARIANT .data
376+
325377 Return $S_OK
326378 EndIf
327379
0 commit comments