ole2disp: Implement SafeArrayAllocData().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
1529f082e6
commit
beceaa82ca
|
@ -72,6 +72,23 @@ static void safearray_free(SEGPTR ptr)
|
|||
WOWGlobalUnlockFree16(ptr);
|
||||
}
|
||||
|
||||
static ULONG safearray_getcellcount(const SAFEARRAY16 *sa)
|
||||
{
|
||||
const SAFEARRAYBOUND16 *sab = sa->rgsabound;
|
||||
USHORT count = sa->cDims;
|
||||
ULONG cells = 1;
|
||||
|
||||
while (count--)
|
||||
{
|
||||
if (!sab->cElements)
|
||||
return 0;
|
||||
cells *= sab->cElements;
|
||||
sab++;
|
||||
}
|
||||
|
||||
return cells;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* SafeArrayAllocDescriptor [OLE2DISP.38]
|
||||
*/
|
||||
|
@ -95,6 +112,23 @@ HRESULT WINAPI SafeArrayAllocDescriptor16(UINT16 dims, SEGPTR *ret)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* SafeArrayAllocData [OLE2DISP.39]
|
||||
*/
|
||||
HRESULT WINAPI SafeArrayAllocData16(SAFEARRAY16 *sa)
|
||||
{
|
||||
ULONG size;
|
||||
|
||||
TRACE("%p\n", sa);
|
||||
|
||||
if (!sa)
|
||||
return E_INVALIDARG16;
|
||||
|
||||
size = safearray_getcellcount(sa);
|
||||
sa->pvData = safearray_alloc(size * sa->cbElements);
|
||||
return sa->pvData ? S_OK : E_OUTOFMEMORY16;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* SafeArrayDestroyDescriptor [OLE2DISP.40]
|
||||
*/
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
36 stub REVOKEACTIVEOBJECT
|
||||
37 stub GETACTIVEOBJECT
|
||||
38 pascal SafeArrayAllocDescriptor(word ptr) SafeArrayAllocDescriptor16
|
||||
39 stub SAFEARRAYALLOCDATA
|
||||
39 pascal SafeArrayAllocData(ptr) SafeArrayAllocData16
|
||||
40 pascal SafeArrayDestroyDescriptor(segptr) SafeArrayDestroyDescriptor16
|
||||
41 stub SAFEARRAYDESTROYDATA
|
||||
42 stub SAFEARRAYREDIM
|
||||
|
|
Loading…
Reference in New Issue