Quote:
Glad to hear that it's working well.
Except for these two, I've got all the other methods working now. They both seem to do nothing and generate no errors. Maybe with a hint on either one I can figure them both out. It must be something wrong in how I've constructed
var. Can you see anything obvious that is not correct? Thanks again.
Code:
;ChangeSortOrder
pFilename := SysAllocString("")
pOrderBy := SysAllocString("title")
pRecordset := SysAllocString(sRecordset) ;input value comes from GenerateHTML
VarSetCapacity(var, 56, 0)
NumPut(8|0x4000, var, 0), NumPut(&var+48, var, 8)
NumPut(8,var, 16), NumPut(pOrderBy, var, 24)
NumPut(8|0x4000, var, 32), NumPut(&var+52, var, 40)
NumPut(pFilename,var, 48), NumPut(pRecordset, var, 52)
nResult := Invoke(pds, "ChangeSortOrder", var)
Unicode2Ansi(pstr1 := NumGet(var, 48), sFilename)
Unicode2Ansi(pstr2 := NumGet(var, 52), sRecordset)
SysFreeString(pFilename)
SysFreeString(pRecordset)
SysFreeString(pOrderBy)
MsgBox, % "ChangeSortOrder`n Filename: " . sFilename . "`n New Recordset: " . sRecordset
and here's the type lib
Code:
' ****************************************************************************************
' ChangeSortOrder method
' Interface name = IDataServer
' VTable offset = 64 [&H40]
' DispID = 209 [&H000000D1]
' ****************************************************************************************
FUNCTION BookCATIDataServer_ChangeSortOrder ALIAS "BookCATIDataServer_ChangeSortOrder" ( _
BYVAL pthis AS DWORD PTR _ ' %VT_DISPATCH <dispinterface>
, BYREF RecordsetGUID AS STRING _ ' *%VT_BSTR <DYNAMIC UNICODE STRING> [in]
, BYVAL OrderBy AS STRING _ ' %VT_BSTR <DYNAMIC UNICODE STRING> [in]
, BYREF prmFilename AS STRING _ ' *%VT_BSTR <DYNAMIC UNICODE STRING> [in]
, BYREF Result AS LONG _ ' *%VT_I4 <LONG> [out]
) EXPORT AS LONG ' %VT_HRESULT <LONG>
LOCAL HRESULT AS LONG
OrderBy = UCODE$(OrderBy)
IF pthis = 0 THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[16] USING BookCATIDataServer_ChangeSortOrder(pthis, RecordsetGUID, OrderBy, prmFilename, Result) TO HRESULT
FUNCTION = HRESULT
RecordsetGUID = ACODE$(RecordsetGUID)
prmFilename = ACODE$(prmFilename)
END FUNCTION
And the other one
Code:
;GenerateHTMLListPage
pFilename := SysAllocString("")
nPage := 2
pRecordset := SysAllocString(sRecordset) ;value comes from GenerateHTML with sFilter:="Author=*"
VarSetCapacity(var, 52, 0)
NumPut(8|0x4000, var, 0), NumPut(&var+48, var, 8)
NumPut(3,var, 16), NumPut(nPage, var, 24)
NumPut(8, var,32), NumPut(pRecordset ,var,40)
NumPut(pFilename, var, 48)
nResult := Invoke(pds, "GenerateHTMLListPage", var)
Unicode2Ansi(pstr1 := NumGet(var, 48), sFilenameOUT)
SysFreeString(pFilename)
SysFreeString(pRecordset)
MsgBox, % "GenerateHtmlListPage`n Filename: " . sFilenameOUT . "`n nResult: " . nResult
Code:
' ****************************************************************************************
' GenerateHTMLListPage method
' Interface name = IDataServer
' VTable offset = 60 [&H3C]
' DispID = 208 [&H000000D0]
' ****************************************************************************************
FUNCTION BookCATIDataServer_GenerateHTMLListPage ALIAS "BookCATIDataServer_GenerateHTMLListPage" ( _
BYVAL pthis AS DWORD PTR _ ' %VT_DISPATCH <dispinterface>
, BYVAL RecordsetGUID AS STRING _ ' %VT_BSTR <DYNAMIC UNICODE STRING> [in]
, BYVAL PageNo AS LONG _ ' %VT_I4 <LONG> [in]
, BYREF prmFilename AS STRING _ ' *%VT_BSTR <DYNAMIC UNICODE STRING> [in]
, BYREF Result AS LONG _ ' *%VT_I4 <LONG> [out]
) EXPORT AS LONG ' %VT_HRESULT <LONG>
LOCAL HRESULT AS LONG
RecordsetGUID = UCODE$(RecordsetGUID)
IF pthis = 0 THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[15] USING BookCATIDataServer_GenerateHTMLListPage(pthis, RecordsetGUID, PageNo, prmFilename, Result) TO HRESULT
FUNCTION = HRESULT
prmFilename = ACODE$(prmFilename)
END FUNCTION
Quote:
BTW, I think it confirms my previous suspicion that there may be some glitch in BookCat's COM implementation.
I accept your word on it. I'm too ignorant still about the inner workings of COM to know why it didn't work.