diff --git a/dlls/comctl32/dpa.c b/dlls/comctl32/dpa.c index def2e9596ef..f9c8afc8bd9 100644 --- a/dlls/comctl32/dpa.c +++ b/dlls/comctl32/dpa.c @@ -61,15 +61,6 @@ typedef struct _STREAMDATA DWORD dwItems; } STREAMDATA, *PSTREAMDATA; -typedef struct _LOADDATA -{ - INT nCount; - PVOID ptr; -} LOADDATA, *LPLOADDATA; - -typedef HRESULT (CALLBACK *DPALOADPROC)(LPLOADDATA,IStream*,LPARAM); - - /************************************************************************** * DPA_LoadStream [COMCTL32.9] * @@ -79,29 +70,29 @@ typedef HRESULT (CALLBACK *DPALOADPROC)(LPLOADDATA,IStream*,LPARAM); * phDpa [O] pointer to a handle to a dynamic pointer array * loadProc [I] pointer to a callback function * pStream [I] pointer to a stream - * lParam [I] application specific value + * pData [I] pointer to callback data * * RETURNS * Success: TRUE - * Failure: FALSE + * Failure: FALSE * * NOTES * No more information available yet! */ -HRESULT WINAPI DPA_LoadStream (HDPA *phDpa, DPALOADPROC loadProc, - IStream *pStream, LPARAM lParam) +HRESULT WINAPI DPA_LoadStream (HDPA *phDpa, PFNDPASTREAM loadProc, + IStream *pStream, LPVOID pData) { HRESULT errCode; LARGE_INTEGER position; ULARGE_INTEGER newPosition; STREAMDATA streamData; - LOADDATA loadData; + DPASTREAMINFO streamInfo; ULONG ulRead; HDPA hDpa; PVOID *ptr; - FIXME ("phDpa=%p loadProc=%p pStream=%p lParam=%lx\n", - phDpa, loadProc, pStream, lParam); + FIXME ("phDpa=%p loadProc=%p pStream=%p pData=%p\n", + phDpa, loadProc, pStream, pData); if (!phDpa || !loadProc || !pStream) return E_INVALIDARG; @@ -127,7 +118,7 @@ HRESULT WINAPI DPA_LoadStream (HDPA *phDpa, DPALOADPROC loadProc, streamData.dwSize, streamData.dwData2, streamData.dwItems); if ( ulRead < sizeof(STREAMDATA) || - lParam < sizeof(STREAMDATA) || + (DWORD)pData < sizeof(STREAMDATA) || streamData.dwSize < sizeof(STREAMDATA) || streamData.dwData2 < 1) { errCode = E_FAIL; @@ -146,19 +137,19 @@ HRESULT WINAPI DPA_LoadStream (HDPA *phDpa, DPALOADPROC loadProc, /* load data from the stream into the dpa */ ptr = hDpa->ptrs; - for (loadData.nCount = 0; loadData.nCount < streamData.dwItems; loadData.nCount++) { - errCode = (loadProc)(&loadData, pStream, lParam); + for (streamInfo.iPos = 0; streamInfo.iPos < streamData.dwItems; streamInfo.iPos++) { + errCode = (loadProc)(&streamInfo, pStream, pData); if (errCode != S_OK) { errCode = S_FALSE; break; } - *ptr = loadData.ptr; + *ptr = streamInfo.pvItem; ptr++; } /* set the number of items */ - hDpa->nItemCount = loadData.nCount; + hDpa->nItemCount = streamInfo.iPos; /* store the handle to the dpa */ *phDpa = hDpa; @@ -177,21 +168,21 @@ HRESULT WINAPI DPA_LoadStream (HDPA *phDpa, DPALOADPROC loadProc, * hDpa [I] handle to a dynamic pointer array * loadProc [I] pointer to a callback function * pStream [I] pointer to a stream - * lParam [I] application specific value + * pData [I] pointer to callback data * * RETURNS * Success: TRUE - * Failure: FALSE + * Failure: FALSE * * NOTES * No more information available yet! */ -HRESULT WINAPI DPA_SaveStream (const HDPA hDpa, DPALOADPROC loadProc, - IStream *pStream, LPARAM lParam) +HRESULT WINAPI DPA_SaveStream (const HDPA hDpa, PFNDPASTREAM loadProc, + IStream *pStream, LPVOID pData) { - FIXME ("hDpa=%p loadProc=%p pStream=%p lParam=%lx\n", - hDpa, loadProc, pStream, lParam); + FIXME ("hDpa=%p loadProc=%p pStream=%p pData=%p\n", + hDpa, loadProc, pStream, pData); return E_FAIL; } diff --git a/dlls/comctl32/tests/dpa.c b/dlls/comctl32/tests/dpa.c index d7de37710c7..e9a1fa5b965 100644 --- a/dlls/comctl32/tests/dpa.c +++ b/dlls/comctl32/tests/dpa.c @@ -33,14 +33,6 @@ #define expect(expected, got) ok(got == expected, "Expected %d, got %d\n", expected, got) -typedef struct _ITEMDATA -{ - INT iPos; - PVOID pvData; -} ITEMDATA, *LPITEMDATA; - -typedef HRESULT (CALLBACK *PFNDPASTM)(LPITEMDATA,IStream*,LPARAM); - static HDPA (WINAPI *pDPA_Clone)(const HDPA,const HDPA); static HDPA (WINAPI *pDPA_Create)(INT); static HDPA (WINAPI *pDPA_CreateEx)(INT,HANDLE); @@ -53,9 +45,9 @@ static INT (WINAPI *pDPA_GetPtr)(const HDPA,INT); static INT (WINAPI *pDPA_GetPtrIndex)(const HDPA,PVOID); static BOOL (WINAPI *pDPA_Grow)(HDPA,INT); static INT (WINAPI *pDPA_InsertPtr)(const HDPA,INT,PVOID); -static HRESULT (WINAPI *pDPA_LoadStream)(HDPA*,PFNDPASTM,IStream*,LPARAM); +static HRESULT (WINAPI *pDPA_LoadStream)(HDPA*,PFNDPASTREAM,IStream*,LPARAM); static BOOL (WINAPI *pDPA_Merge)(const HDPA,const HDPA,DWORD,PFNDPACOMPARE,PFNDPAMERGE,LPARAM); -static HRESULT (WINAPI *pDPA_SaveStream)(HDPA,PFNDPASTM,IStream*,LPARAM); +static HRESULT (WINAPI *pDPA_SaveStream)(HDPA,PFNDPASTREAM,IStream*,LPARAM); static INT (WINAPI *pDPA_Search)(HDPA,PVOID,INT,PFNDPACOMPARE,LPARAM,UINT); static BOOL (WINAPI *pDPA_SetPtr)(const HDPA,INT,PVOID); static BOOL (WINAPI *pDPA_Sort)(const HDPA,PFNDPACOMPARE,LPARAM); @@ -140,29 +132,29 @@ static INT CALLBACK CB_EnumFirstThree(PVOID pItem, PVOID lp) return pItem != (PVOID)3; } -static HRESULT CALLBACK CB_Save(LPITEMDATA pInfo, IStream *pStm, LPARAM lp) +static HRESULT CALLBACK CB_Save(DPASTREAMINFO *pInfo, IStream *pStm, LPVOID lp) { HRESULT hRes; - ok(lp == 0xdeadbeef, "lp=%ld\n", lp); + ok(lp == (LPVOID)0xdeadbeef, "lp=%p\n", lp); hRes = IStream_Write(pStm, &pInfo->iPos, sizeof(INT), NULL); ok(hRes == S_OK, "hRes=0x%x\n", hRes); - hRes = IStream_Write(pStm, &pInfo->pvData, sizeof(PVOID), NULL); + hRes = IStream_Write(pStm, &pInfo->pvItem, sizeof(PVOID), NULL); ok(hRes == S_OK, "hRes=0x%x\n", hRes); return S_OK; } -static HRESULT CALLBACK CB_Load(LPITEMDATA pInfo, IStream *pStm, LPARAM lp) +static HRESULT CALLBACK CB_Load(DPASTREAMINFO *pInfo, IStream *pStm, LPVOID lp) { HRESULT hRes; INT iOldPos; iOldPos = pInfo->iPos; - ok(lp == 0xdeadbeef, "lp=%ld\n", lp); + ok(lp == (LPVOID)0xdeadbeef, "lp=%p\n", lp); hRes = IStream_Read(pStm, &pInfo->iPos, sizeof(INT), NULL); ok(hRes == S_OK, "hRes=0x%x\n", hRes); ok(pInfo->iPos == iOldPos, "iPos=%d iOldPos=%d\n", pInfo->iPos, iOldPos); - hRes = IStream_Read(pStm, &pInfo->pvData, sizeof(PVOID), NULL); + hRes = IStream_Read(pStm, &pInfo->pvItem, sizeof(PVOID), NULL); ok(hRes == S_OK, "hRes=0x%x\n", hRes); return S_OK; } diff --git a/include/commctrl.h b/include/commctrl.h index 55cae1c5f7d..bda13de44a2 100644 --- a/include/commctrl.h +++ b/include/commctrl.h @@ -5011,6 +5011,19 @@ void WINAPI DPA_DestroyCallback(HDPA, PFNDPAENUMCALLBACK, LPVOID); INT WINAPI DPA_Search(HDPA, LPVOID, INT, PFNDPACOMPARE, LPARAM, UINT); BOOL WINAPI DPA_Merge(HDPA, HDPA, DWORD, PFNDPACOMPARE, PFNDPAMERGE, LPARAM); +/* save/load from stream */ +typedef struct _DPASTREAMINFO +{ + INT iPos; /* item index */ + LPVOID pvItem; +} DPASTREAMINFO; + +struct IStream; +typedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, LPVOID); + +HRESULT WINAPI DPA_LoadStream(HDPA*, PFNDPASTREAM, struct IStream*, LPVOID); +HRESULT WINAPI DPA_SaveStream(HDPA, PFNDPASTREAM, struct IStream*, LPVOID); + BOOL WINAPI Str_SetPtrW (LPWSTR *, LPCWSTR); /**************************************************************************