On 1/4/20 2:59 PM, Sven Baars wrote:
static HRESULT WINAPI ID3DXFontImpl_PreloadTextA(ID3DXFont *iface, const char *string, INT count) {
- FIXME("iface %p, string %s, count %d stub!\n", iface, debugstr_a(string), count);
- return E_NOTIMPL;
- WCHAR *wstr;
- HRESULT hr;
- TRACE("iface %p, string %s, count %d\n", iface, debugstr_a(string), count);
- if (!string && count == 0) return D3D_OK;
- if (!string) return D3DERR_INVALIDCALL;
- if (count < 0)
count = MultiByteToWideChar(CP_ACP, 0, string, -1, NULL, 0);
- wstr = heap_alloc_zero(count * sizeof(WCHAR));
- if (!wstr)
return E_OUTOFMEMORY;
- MultiByteToWideChar(CP_ACP, 0, string, -1, wstr, count);
- hr = ID3DXFont_PreloadTextW(iface, wstr, count);
- heap_free(wstr);
- return hr;
There is some confusion with conversion here. Method argument indicates length on input A string, and if negative means it's terminated. So to convert to W:
- countW = mbtowc(string, count < 0 ? -1 : count, NULL, 0) - wstr = heap_alloc(countW) - mbtowc(string, count < 0 ? -1 : count, wstr, countW)