From: Zhiyi Zhang zzhang@codeweavers.com
--- dlls/oledb32/convert.c | 11 +++++++++++ dlls/oledb32/tests/convert.c | 7 ------- 2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c index 4ed9f0d8cc6..bb427e0cb54 100644 --- a/dlls/oledb32/convert.c +++ b/dlls/oledb32/convert.c @@ -855,6 +855,17 @@ static HRESULT WINAPI convert_DataConvert(IDataConvert* iface, { case DBTYPE_EMPTY: *d = GUID_NULL; hr = S_OK; break; case DBTYPE_GUID: *d = *(GUID*)src; hr = S_OK; break; + case DBTYPE_VARIANT: + if (V_VT((VARIANT *)src) == VT_BSTR) + { + hr = CLSIDFromString(V_BSTR((VARIANT *)src), d); + if (FAILED(hr)) + { + *dst_len = sizeof(GUID); + *dst_status = DBSTATUS_E_CANTCONVERTVALUE; + } + break; + } default: FIXME("Unimplemented conversion %04x -> GUID\n", src_type); return E_NOTIMPL; } break; diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c index 019e8c96d93..aea2e40473c 100644 --- a/dlls/oledb32/tests/convert.c +++ b/dlls/oledb32/tests/convert.c @@ -2686,13 +2686,9 @@ static void test_converttoguid(void) V_VT(&v) = VT_BSTR; V_BSTR(&v) = SysAllocStringLen(L"{0c733a8d-2a1c-11ce-ade5-00aa0044773d}", 38); hr = IDataConvert_DataConvert(convert, DBTYPE_VARIANT, DBTYPE_GUID, 0, &dst_len, &v, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0); - todo_wine ok(hr == S_OK, "got %08lx\n", hr); - todo_wine ok(dst_status == DBSTATUS_S_OK, "got %08lx\n", dst_status); - todo_wine ok(dst_len == sizeof(GUID), "got %Id\n", dst_len); - todo_wine ok(IsEqualGUID(&dst, &IID_IDataConvert), "didn't get IID_IDataConvert\n"); SysFreeString(V_BSTR(&v));
@@ -2700,11 +2696,8 @@ static void test_converttoguid(void) V_VT(&v) = VT_BSTR; V_BSTR(&v) = SysAllocStringLen(L"{invalid0-0000-0000-0000-000000000000}", 38); hr = IDataConvert_DataConvert(convert, DBTYPE_VARIANT, DBTYPE_GUID, 0, &dst_len, &v, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0); - todo_wine ok(hr == CO_E_CLASSSTRING, "got %08lx\n", hr); - todo_wine ok(dst_status == DBSTATUS_E_CANTCONVERTVALUE, "got %08lx\n", dst_status); - todo_wine ok(dst_len == sizeof(GUID), "got %Id\n", dst_len); SysFreeString(V_BSTR(&v)); }