Нижеследующий типовой код демонстрирует, как заменить функцию LoadCursor в Microsoft Layer for Unicode.
// переадресуем объявление замены HCURSOR __stdcall UserLoadCursorW(HINSTANCE hInstance, LPCWSTR lpCursorName); // заменим extern FARPROC Unicows_LoadCursorW = (FARPROC)&UserLoadCursorW; HCURSOR __stdcall UserLoadCursorW(HINSTANCE hInstance, LPCWSTR lpCursorName) { // Преобразуем только реальные символьные строки, а не // пользовательские атомы или пустые указатели (NULLs) if ((ULONG_PTR)(lpCursorName) > 0xffff) { // Получим размер строки Unicode size_t cchCursorName = wcslen(lpCursorName); // Назначим достаточное место для строки Ansi LPSTR lpCursorNameA = _alloca((cchCursorName + 1) * 2); // Преобразуем строку из Unicode WideCharToMultiByte(CP_ACP, 0, lpCursorName, cchCursor, lpCursorNameA, cchCursor * 2, NULL, NULL); return(LoadCursorA(hInstance, lpCursorNameA); } else { // Это - не действительная строка, чтобы хорошо вызываться // напрямую без преобразования этого параметра. return(LoadCursorA(hInstance, (LPSTR)lpCursorName); } } |