diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index b1f8a9d6739..0f515c47622 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -964,6 +964,8 @@ inline HRESULT VARIANT_from_xmlChar(xmlChar *str, VARIANT *v, BSTR type) if(!lstrcmpiW(type, szInt)) V_VT(v) = VT_I4; + else if(!lstrcmpiW(type, szFixed)) + V_VT(v) = VT_CY; else { FIXME("Type handling not yet implemented\n"); diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index a0dbe02d537..cb8aa4e2fb3 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -154,6 +154,7 @@ static const CHAR szTypeValueXML[] = " 12.44\n" " -3.71e3\n" " -13\n" +" 7322.9371\n" ""; static const CHAR szBasicTransformSSXMLPart1[] = @@ -4051,6 +4052,27 @@ static void test_NodeTypeValue(void) IXMLDOMNode_Release(pNode); } + + hr = IXMLDOMDocument2_selectSingleNode(doc, _bstr_("root/fixed"), &pNode); + ok(hr == S_OK, "ret %08x\n", hr ); + if(hr == S_OK) + { + VARIANT hlp_in, hlp_out; + V_VT(&hlp_in) = VT_BSTR; + V_BSTR(&hlp_in) = _bstr_("7322.9371"); + V_VT(&hlp_out) = VT_CY; + ok(VariantChangeType(&hlp_out, &hlp_in, 0, VT_CY) == S_OK, "VariantChangeType failed\n"); + VariantClear(&hlp_in); + + hr = IXMLDOMNode_get_nodeTypedValue(pNode, &v); + ok(hr == S_OK, "ret %08x\n", hr ); + ok(V_VT(&v) == VT_CY, "incorrect type\n"); + ok(VarCyCmp(V_CY(&v), V_CY(&hlp_out)) == VARCMP_EQ, "incorrect value\n"); + VariantClear(&hlp_out); + VariantClear(&v); + + IXMLDOMNode_Release(pNode); + } } IXMLDOMDocument2_Release(doc);