[wine-zh] 如何把 WCHAR[] 中存储的浮点数转换成正整数?

  • From: Zhenbo Li <litimetal@xxxxxxxxx>
  • To: wine-zh <wine-zh@xxxxxxxxxxxxx>
  • Date: Tue, 18 Mar 2014 16:28:34 +0800

Hi
根据 MSDN 的要求[1],
VARIANT of type VT_I4 or VT_BSTR that   specifies one of the values
listed in Possible Values
但测试中,传入参数可能是浮点数。IE 的解决办法是截断小数部分。
[1]: http://msdn.microsoft.com/en-us/library/aa768621%28v=vs.85%29.aspx

我当前的处理办法是这样的
static HRESULT variant_size2nsastring(nsAString *nsstr, const VARIANT *p)
{
    static WCHAR buf[64];
    switch(V_VT(p)) {
    case VT_BSTR:
        return nsAString_Init(nsstr, V_BSTR(p));
    case VT_I4: {
        static const WCHAR formatW[] = {'%','d',0};
        sprintfW(buf, formatW, V_I4(p));
        return nsAString_Init(nsstr, buf);
    }
    case VT_R8: {
        static const WCHAR formatW[] = {'%','.','0','f',0};
        sprintfW(buf, formatW, V_R8(p));
        return nsAString_Init(nsstr, buf);
    }
    default:
        FIXME("unsupported arg %s\n", debugstr_variant(p));
        return E_NOTIMPL;
    }
    return S_OK;
}

但这么做的话,宽度会被四舍五入,而不是截断。
请问,大家建议我如何解决?谢谢

PS 最新版本的 code 在:
https://gitcafe.com/endle/WineGsoc/blob/develop/dlls/mshtml/htmltable.c

-- 
Have a nice day!
Zhenbo Li

Other related posts:

  • » [wine-zh] 如何把 WCHAR[] 中存储的浮点数转换成正整数? - Zhenbo Li