Аргумент типа "char *" несовместим с параметром типа " LPWSTR"
Об этом, вероятно, уже спрашивали раньше, но я, кажется, не могу найти решение:
std::string GetPath()
{
char buffer[MAX_PATH];
::GetSystemDirectory(buffer,MAX_PATH);
strcat(buffer,"\version.dll");
return std::string(buffer);
}
Возвращает сообщение об ошибке:
argument of type "char *" is incompatible with parameter of type "LPWSTR"
Так что да. У кого-нибудь есть ответ?
2 ответов:
Вам нужно использовать версию ansi:
std::string GetPath() { char buffer[MAX_PATH] = {}; ::GetSystemDirectoryA(buffer,_countof(buffer)); // notice the A strcat(buffer,"\\version.dll"); return std::string(buffer); }Или использовать unicode:
std::wstring GetPath() { wchar_t buffer[MAX_PATH] = {}; ::GetSystemDirectoryW(buffer,_countof(buffer)); // notice the W, or drop the W to get it "by default" wcscat(buffer,L"\\version.dll"); return std::wstring(buffer); }Вместо явного вызова версий A/W вы можете удалить A/W и настроить весь проект на использование ansi/unicode. Все это приведет к изменению некоторых # определений, чтобы заменить foo на foaa/W.
Обратите внимание, что вы должны использовать _countof (), чтобы избежать неправильных размеров в зависимости от типа буферов тоже.
Если вы скомпилируете код с использованием Многобайтовой поддержки, он будет скомпилирован правильно, но при компиляции с использованием флага Unicode он выдаст ошибку, потому что в Unicode support ::GetSystemDirectoryA становится ::GetSystemDirectoryW use рассмотрите возможность использования TCHAR вместо char.TCHAR определяется таким образом, что он становится char в Многобайтовом флаге и wchar_t с флагом Unicode
TCHAR buffer[MAX_PATH]; ::GetSystemDirectory(buffer,MAX_PATH); _tcscat(buffer,_T("\\version.dll"));Вы можете использовать typedef для string /wstring, чтобы ваш код стал независимым
#ifdef UNICODE typedef wstring STRING; #else typedef string STRING; #endif STRING GetPath() { TCHAR buffer[MAX_PATH]; ::GetSystemDirectory(buffer,MAX_PATH); _tcscat(buffer,_T("\\version.dll")); return STRING(buffer); }
Comments