diff --git a/dlls/ole2disp.dll16/ole2disp.c b/dlls/ole2disp.dll16/ole2disp.c index af6f03cbb6c..d61b5e8c5a1 100644 --- a/dlls/ole2disp.dll16/ole2disp.c +++ b/dlls/ole2disp.dll16/ole2disp.c @@ -89,6 +89,15 @@ static ULONG safearray_getcellcount(const SAFEARRAY16 *sa) return cells; } +static HRESULT safearray_lock(SAFEARRAY16 *sa) +{ + if (sa->cLocks == 0xffff) + return E_UNEXPECTED; + + sa->cLocks++; + return S_OK; +} + /****************************************************************************** * SafeArrayGetDim [OLE2DISP.17] */ @@ -117,11 +126,7 @@ HRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa) if (!sa) return E_INVALIDARG16; - if (sa->cLocks == 0xffff) - return E_UNEXPECTED; - - sa->cLocks++; - return S_OK; + return safearray_lock(sa); } /****************************************************************************** @@ -141,6 +146,34 @@ HRESULT WINAPI SafeArrayUnlock16(SAFEARRAY16 *sa) return S_OK; } +/****************************************************************************** + * SafeArrayAccessData [OLE2DISP.23] + */ +HRESULT WINAPI SafeArrayAccessData16(SAFEARRAY16 *sa, SEGPTR *data) +{ + HRESULT hr; + + TRACE("(%p, %p)\n", sa, data); + + /* arguments are not tested, it crashes if any of them is NULL */ + + hr = safearray_lock(sa); + if (FAILED(hr)) + return hr; + + *data = sa->pvData; + return S_OK; +} + +/****************************************************************************** + * SafeArrayUnaccessData [OLE2DISP.24] + */ +HRESULT WINAPI SafeArrayUnaccessData16(SAFEARRAY16 *sa) +{ + TRACE("(%p)\n", sa); + return SafeArrayUnlock16(sa); +} + /****************************************************************************** * SafeArrayAllocDescriptor [OLE2DISP.38] */ diff --git a/dlls/ole2disp.dll16/ole2disp.dll16.spec b/dlls/ole2disp.dll16/ole2disp.dll16.spec index b0db9201206..4ee52e1f5f2 100644 --- a/dlls/ole2disp.dll16/ole2disp.dll16.spec +++ b/dlls/ole2disp.dll16/ole2disp.dll16.spec @@ -20,8 +20,8 @@ 20 stub SAFEARRAYGETLBOUND 21 pascal SafeArrayLock(ptr) SafeArrayLock16 22 pascal SafeArrayUnlock(ptr) SafeArrayUnlock16 -23 stub SAFEARRAYACCESSDATA -24 stub SAFEARRAYUNACCESSDATA +23 pascal SafeArrayAccessData(ptr ptr) SafeArrayAccessData16 +24 pascal SafeArrayUnaccessData(ptr) SafeArrayUnaccessData16 25 stub SAFEARRAYGETELEMENT 26 stub SAFEARRAYPUTELEMENT 27 stub SAFEARRAYCOPY