当我尝试编译我的项目时,我遇到了一些我无法解决的错误..无论如何,这是其中一个代码:
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
感谢您的帮助..问候,梅塞尔
答案 0 :(得分:5)
Windows API的许多“功能”实际上是ANSI(A
)或Unicode(W
for wide)版本的函数的宏。根据您的项目设置,当您要调用DoSomeFunctionA
时,这些宏可以是DoSomeFunctionW
或DoSomeFunction
。然后可移植的方式是使用TCHAR
,因为它被定义为ANSI的char
和Unicode的wchar_t
。
如果您不想使用Unicode进行编译,可以将项目设置更改为Project Properties -> Configuration Properties -> General -> Character Set -> Use Multibyte Character Set
。
如果您确实想使用Unicode进行编译,那么您应该将A
(例如:GetModuleFileNameA
)附加到必要的函数名称。