Hello I am trying to pass the calls of ITaskbarList meditating CoCreateInstance + DispCallFunc etc etc, a bit for learning a bit more to not use the tlb, but apparently I have not been able to start I try to make some calls but I only get errors.
Will my statements be correct?
Private Const SetProgressValue As Long = 1
Private Const SetProgressState As Long = 2
Code:Option Explicit
Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, ID As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function CoCreateInstance Lib "ole32" (ByVal rclsid As Long, ByVal pUnkOuter As Long, ByVal dwClsContext As Long, ByVal riid As Long, ByRef ppv As Long) As Long
Private Declare Function DispCallFunc Lib "oleaut32" (ByVal pvInstance As Long, ByVal oVft As Long, ByVal lCc As Long, ByVal vtReturn As VbVarType, ByVal cActuals As Long, prgVt As Any, prgpVarg As Any, pvargResult As Variant) As Long
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Const CLSID_TaskbarList As String = "{56FDF344-FD6D-11d0-958A-006097C9A090}"
Private Const IID_ITaskbarList2 As String = "{602D4995-B13A-429b-A66E-1935E44F4317}"
Private Const IID_ITaskbarList3 As String = "{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}"
Private Const CLSID_TaskbarList3 As String = "{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}"
Private Const CLSID_TaskbarList4 As String = "{C43DC798-95D1-4BEA-9030-BB99E2983A1A}"
Private Const CLSCTX_INPROC_SERVER As Long = 1
Private Const CC_STDCALL As Long = &H4&
Private Const SetProgressValue As Long = 1
Private Const SetProgressState As Long = 2
Private Const TBPF_NORMAL As Long = 2
Private Const crProgressMax As Currency = 100
Private crProgress As Currency
Public Sub TEST()
Dim IID As GUID
Dim CLSID As GUID
Dim rc As Long
Dim iTaskBarVB2 As Long
rc = CLSIDFromString(StrPtr(CLSID_TaskbarList), CLSID)
rc = CLSIDFromString(StrPtr(CLSID_TaskbarList3), IID)
rc = CoCreateInstance(VarPtr(CLSID), 0&, CLSCTX_INPROC_SERVER, VarPtr(IID), iTaskBarVB2)
Call DispCallByVtbl(iTaskBarVB2, SetProgressState, Form1.hWnd, TBPF_NORMAL)
crProgress = 50
Call DispCallByVtbl(iTaskBarVB2, SetProgressValue, Form1.hWnd, crProgress, crProgressMax)
End Sub
Private Function DispCallByVtbl(pUnk As Long, ByVal lIndex As Long, ParamArray A() As Variant) As Variant
Dim lIdx As Long
Dim vParam() As Variant
Dim vType(0 To 63) As Integer
Dim vPtr(0 To 63) As Long
Dim hResult As Long
vParam = A
For lIdx = 0 To UBound(vParam)
vType(lIdx) = VarType(vParam(lIdx))
vPtr(lIdx) = VarPtr(vParam(lIdx))
Next
hResult = DispCallFunc(pUnk, lIndex * 4, CC_STDCALL, vbLong, lIdx, vType(0), vPtr(0), DispCallByVtbl)
If hResult < 0 Then
Err.Raise hResult, "DispCallFunc"
End If
End Function

