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)