Visual C ++: ошибка C2664: «GetModuleFileNameW»: невозможно преобразовать параметр 2 из «char [260]» в «LPWCH» - PullRequest
4 голосов
/ 18 марта 2012

когда я пытался скомпилировать свой проект, у меня возникли ошибки, которые я не могу решить ... в любом случае это один из кодов:

public:
void Init(HMODULE hModule, string Filename)
{
    char szLoc[ MAX_PATH ];
    GetModuleFileName(hModule, szLoc, sizeof( szLoc ) );
    char* dwLetterAddress = strrchr( szLoc, '\\' );
    *( dwLetterAddress + 1 ) = 0;
    strcat( szLoc, Filename.c_str() );
    __OutStream.open( szLoc, ios::app);
}

И ошибка:

error C2664: 'GetModuleFileNameW' : cannot convert parameter 2 from 'char [260]' to 'LPWCH'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style  cast or function-style cast

Спасибо за помощь. С уважением, Мессер

1 Ответ

5 голосов
/ 18 марта 2012

Многие «функции» Windows API на самом деле являются макросами для ANSI (A) или Unicode (W для широкой) версии функции. В зависимости от настроек вашего проекта, эти макросы будут либо DoSomeFunctionA, либо DoSomeFunctionW, если вы хотите вызвать DoSomeFunction. Тогда переносимым способом будет использование TCHAR, поскольку оно определено как char для ANSI и wchar_t для Unicode.

Если вы не хотите компилировать с Unicode, вы можете изменить настройки вашего проекта на Project Properties -> Configuration Properties -> General -> Character Set -> Use Multibyte Character Set.

Если вы хотите скомпилировать с Unicode, вам следует добавить A (например: GetModuleFileNameA) к необходимым именам функций.

...