Nikolay Sivov wrote:
+ case VT_LPSTR: + *pcch = MultiByteToWideChar(CP_ACP, 0, propvarIn ->u.pszVal, -1, NULL, 0); + break;
You sure it's meant to be WCHAR even for VT_LPSTR type? This looks wrong to me. Yes, windows does convert between narrow and wide strings as requested. If you call PropVariantToString, you'll get a unicode string no matter what (see tests/propsys.c:921).
+/* FIXME: It is 2015, why do I have to write this? */ +static UINT i64_to_wstr(LONGLONG llVal, WCHAR *buf)
Maybe you could reuse VarBstrFromUI8() from oleaut32? VarBstrFromUI8() allocates a new BSTR, I'd prefer something like snprintfW(), but according to libs/wine/string.c:478 it won't support 64bit integers on 32bit machines (and C89 doesn't even specify "%lld"). Maybe vsnprintfW() should be fixed then.
+ if (len < cch) + { + memcpy(buf, propvar->u.bstrVal, len*sizeof(WCHAR)); + buf[len] = 0; + }
Isn't it what strcpyW does? This pattern appears in several places.
Actually, I'd rather prefer to replace the whole block with StringCchCopyW. Which will most likely happen.