Тип T
означает, что SHGetSpecialFolderPath
является пара функций:
SHGetSpecialFolderPathA
для Windows, ANSI кодируются char
на основе текста, и
SHGetSpecialFolderPathW
для UTF-16 закодирован wchar_t
на основе текста, Windows '“ Юникод ”.
Вариант ANSI является просто оболочкой для варианта Unicode, и он не может логически произвести правильный путь во всех случаях.
Но это то, что вам нужно использовать для данных на основе char
.
Альтернативы является использование широкого варианта функции, и использовать любые машины, которые вы комфортно преобразовать широкий текстовый результат в байтах-ориентированные char
на основе кодирования по вашему выбору, например, UTF-8.
Обратите внимание, что строки UTF-8 нельзя использовать непосредственно для открытия файлов и т. Д. Через API Windows, поэтому этот подход требует еще большего преобразования только для использования строки.
Однако я рекомендую переключиться на широкий текст в Windows.
Для этого определите макрокоманду UNICODE
, прежде чем включать <windows.h>
.
Это также значение по умолчанию в проекте Visual Studio.
SHGetSpecialFolderPath не поддерживается с Windows 2000 согласно msdn, как насчет использования SHGetFolderPath? https://msdn.microsoft.com/en-us/library/windows/desktop/bb762181(v=vs.85).aspx Если вам нужно принудительно ввести тип кодирования, в winapi у вас обычно есть окончания с W для wchar_t , A для символа. Такие, как SHGetFolderPathA. Это нужно поддерживать с Win 2000 до сегодняшнего дня, даже если он установлен для устаревания. – Geries