The build-in IDispatch interface declaration is undocumented and, therefore, subject to change.
' *** As built into the PowerBASIC compiler ***
' Note: GetIDsOfNames still uses AS STRING, instead of AS WSTRING, for the rgszNames parameter.
' Therefore, you must use a variable declared AS STRING and convert it to unicode with UCODE$.
'INTERFACE IDispatch $IID_IDispatch
' INHERIT IUnknown
' ' =====================================================================================
' METHOD GetTypeInfoCount ( _ ' VTable offset = 12
' BYREF pctinfo AS DWORD _ ' __out unsigned int *pctinfo
' ) AS LONG ' HRESULT
' ' =====================================================================================
' METHOD GetTypeInfo ( _ ' VTable offset = 16
' BYVAL iTInfo AS DWORD _ ' __in unsigned int iTInfo
' , BYVAL lcid AS DWORD _ ' __in LCID lcid
' , BYREF ppTInfo AS DWORD _ ' __out ITypeInfo **ppTInfo
' ) AS LONG ' HRESULT
' ' =====================================================================================
' METHOD GetIDsOfNames ( _ ' VTable offset = 20
' BYREF riid AS GUID _ ' __in REFIID riid
' , BYREF rgszNames AS STRING _ ' __in OLECHAR **rgszNames
' , BYVAL cNames AS DWORD _ ' __in unsigned int cNames
' , BYVAL lcid AS DWORD _ ' __in LCID lcid
' , BYREF rgDispId AS LONG _ ' __out DISPID *rgDispId
' ) AS LONG ' HRESULT
' ' =====================================================================================
' METHOD Invoke ( _ ' VTable offset = 24
' BYVAL dispIdMember AS LONG _ ' __in DISPID dispIdMember
' , BYREF riid AS GUID _ ' __in REFIID riid
' , BYVAL lcid AS DWORD _ ' __in LCID lcid
' , BYVAL wFlags AS DWORD _ ' __in WORD wFlags
' , BYREF pDispParams AS DISPPARAMS _ ' __in DISPPARAMS *pDispParams
' , BYREF pVarResult AS VARIANT _ ' __out VARIANT *pVarResult
' , BYVAL pExcepInfo AS DWORD _ ' __out EXCEPINFO *pExcepInfo
' , BYREF puArgErr AS DWORD _ ' __out unsigned int *puArgErr
' ) AS LONG ' HRESULT
' ' =====================================================================================
'END INTERFACE
In my headers, I use COM_IDispatch instead:
INTERFACE COM_IDispatch $IID_IDispatch
INHERIT IUnknown
' =====================================================================================
METHOD GetTypeInfoCount ( _ ' VTable offset = 12
BYREF pctinfo AS DWORD _ ' __out unsigned int *pctinfo
) AS LONG ' HRESULT
' =====================================================================================
METHOD GetTypeInfo ( _ ' VTable offset = 16
BYVAL iTInfo AS DWORD _ ' __in unsigned int iTInfo
, BYVAL lcid AS DWORD _ ' __in LCID lcid
, BYREF ppTInfo AS ITypeInfo _ ' __out ITypeInfo **ppTInfo
) AS LONG ' HRESULT
' =====================================================================================
METHOD GetIDsOfNames ( _ ' VTable offset = 20
BYREF riid AS GUID _ ' __in REFIID riid
, BYREF rgszNames AS WSTRING _ ' __in OLECHAR **rgszNames
, BYVAL cNames AS DWORD _ ' __in unsigned int cNames
, BYVAL lcid AS DWORD _ ' __in LCID lcid
, BYREF rgDispId AS LONG _ ' __out DISPID *rgDispId
) AS LONG ' HRESULT
' =====================================================================================
METHOD Invoke ( _ ' VTable offset = 24
BYVAL dispIdMember AS LONG _ ' __in DISPID dispIdMember
, BYREF riid AS GUID _ ' __in REFIID riid
, BYVAL lcid AS DWORD _ ' __in LCID lcid
, BYVAL wFlags AS WORD _ ' __in WORD wFlags
, BYREF pDispParams AS DISPPARAMS _ ' __in DISPPARAMS *pDispParams
, BYREF pVarResult AS VARIANT _ ' __out VARIANT *pVarResult
, BYREF pExcepInfo AS EXCEPINFO _ ' __out EXCEPINFO *pExcepInfo
, BYREF puArgErr AS DWORD _ ' __out unsigned int *puArgErr
) AS LONG ' HRESULT
' =====================================================================================
END INTERFACE