From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 11 +++++++++++ dlls/propsys/tests/propsys.c | 29 +++++++++-------------------- 2 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index 7dff5045f2d..342764a661c 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -717,6 +717,17 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p } return hr; } + case VT_R8: + { + double res; + hr = PropVariantToDouble(propvarSrc, &res); + if (SUCCEEDED(hr)) + { + ppropvarDest->vt = VT_R8; + ppropvarDest->dblVal = res; + } + return hr; + }
case VT_LPWSTR: case VT_BSTR: diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index e05ea615d3b..e0caa37566a 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1530,93 +1530,82 @@ static void test_PropVariantChangeType_R8(void) src.fltVal = 10.1f; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 10.1f, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I4; src.lVal = 123; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 123.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I4; src.lVal = -256; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == -256.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I8; src.hVal.QuadPart = -256; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == -256.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I8; src.hVal.QuadPart = 65536; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 65536.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I8; src.hVal.QuadPart = -321; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == -321.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_UI4; src.ulVal = 6; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 6.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_UI8; src.uhVal.QuadPart = 8; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 8.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_R4; src.fltVal = 8.1f; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 8.1f, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_R4; src.fltVal = 8.6f; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 8.6f, "Unexpected value %f.\n", dest.dblVal); } -}
static void test_PropVariantChangeType(void) {