On 02.03.2015 11:12, Shuai Meng wrote:
- HRESULT hres;
- BSTR bstr;
- WCHAR ret;
- TRACE("(%s)\n", debugstr_variant(arg));
- switch(V_VT(arg)) {
- case VT_NULL:
return MAKE_VBSERROR(VBSE_ILLEGAL_NULL_USE);- case VT_EMPTY:
return MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL);- case VT_BSTR:
bstr = V_BSTR(arg);- default:
hres = to_string(arg, &bstr);if(FAILED(hres))return hres;- }
- ret = bstr[0];
- if(ret == 0)
return MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL);- return return_short(res, ret);
Looks like you need to handle VT_NULL explicitly and after that only distinguish between VT_BSTR or the rest. Also you're leaking memory and missing a 'break'.