Visual C++:错误C2664:'GetModuleFileNameW':无法将参数2从'char [260]'转换为'LPWCH'

use*_*261 4 c++ c2664 visual-studio-2008

当我试图编译我的项目时,我遇到了一些我无法解决的错误..无论如何这是其中一个代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

错误是:

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
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助..问候,梅塞尔

Mar*_*lon 5

Windows API的许多"功能"实际上是对函数的ANSI(A)或Unicode(W对于宽)版本的宏.根据您的项目设置,这些macroes将是要么DoSomeFunctionADoSomeFunctionW当你想打电话DoSomeFunction.然后可以使用便携式方法,TCHAR因为它定义char为ANSI和wchar_tUnicode.

如果您不想使用Unicode进行编译,则可以将项目设置更改为Project Properties -> Configuration Properties -> General -> Character Set -> Use Multibyte Character Set.

如果您确实想使用Unicode进行编译,那么您应该将A(ex :)添加GetModuleFileNameA到必要的函数名称中.

  • 不应该是相反的方式吗? (2认同)