forked from Mirrors/wine-wine
propsys: Added InitVariantFromBuffer implementation.
parent
97b49079c3
commit
f8dd85f246
|
@ -28,7 +28,7 @@
|
||||||
@ stub DllRegisterServer
|
@ stub DllRegisterServer
|
||||||
@ stub DllUnregisterServer
|
@ stub DllUnregisterServer
|
||||||
@ stub InitPropVariantFromBooleanVector
|
@ stub InitPropVariantFromBooleanVector
|
||||||
@ stub InitPropVariantFromBuffer
|
@ stdcall InitPropVariantFromBuffer(ptr long ptr)
|
||||||
@ stub InitPropVariantFromCLSID
|
@ stub InitPropVariantFromCLSID
|
||||||
@ stub InitPropVariantFromDoubleVector
|
@ stub InitPropVariantFromDoubleVector
|
||||||
@ stub InitPropVariantFromFileTime
|
@ stub InitPropVariantFromFileTime
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
@ stub InitPropVariantFromUInt64Vector
|
@ stub InitPropVariantFromUInt64Vector
|
||||||
@ stub InitPropVariantVectorFromPropVariant
|
@ stub InitPropVariantVectorFromPropVariant
|
||||||
@ stub InitVariantFromBooleanArray
|
@ stub InitVariantFromBooleanArray
|
||||||
@ stub InitVariantFromBuffer
|
@ stdcall InitVariantFromBuffer(ptr long ptr)
|
||||||
@ stub InitVariantFromDoubleArray
|
@ stub InitVariantFromDoubleArray
|
||||||
@ stub InitVariantFromFileTime
|
@ stub InitVariantFromFileTime
|
||||||
@ stub InitVariantFromFileTimeArray
|
@ stub InitVariantFromFileTimeArray
|
||||||
|
|
|
@ -132,3 +132,48 @@ HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar)
|
||||||
PROPVAR_GUIDToWSTR(guid, V_BSTR(pvar));
|
PROPVAR_GUIDToWSTR(guid, V_BSTR(pvar));
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar)
|
||||||
|
{
|
||||||
|
TRACE("(%p %u %p)\n", pv, cb, ppropvar);
|
||||||
|
|
||||||
|
ppropvar->u.caub.pElems = CoTaskMemAlloc(cb);
|
||||||
|
if(!ppropvar->u.caub.pElems)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
ppropvar->vt = VT_VECTOR|VT_UI1;
|
||||||
|
ppropvar->u.caub.cElems = cb;
|
||||||
|
memcpy(ppropvar->u.caub.pElems, pv, cb);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar)
|
||||||
|
{
|
||||||
|
SAFEARRAY *arr;
|
||||||
|
void *data;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
TRACE("(%p %u %p)\n", pv, cb, pvar);
|
||||||
|
|
||||||
|
arr = SafeArrayCreateVector(VT_UI1, 0, cb);
|
||||||
|
if(!arr)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
hres = SafeArrayAccessData(arr, &data);
|
||||||
|
if(FAILED(hres)) {
|
||||||
|
SafeArrayDestroy(arr);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(data, pv, cb);
|
||||||
|
|
||||||
|
hres = SafeArrayUnaccessData(arr);
|
||||||
|
if(FAILED(hres)) {
|
||||||
|
SafeArrayDestroy(arr);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
||||||
|
V_VT(pvar) = VT_ARRAY|VT_UI1;
|
||||||
|
V_ARRAY(pvar) = arr;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue