考虑:
void main()
{
LPSTR FileName;
FileName = "C:\\test2.wav";
hFile = CreateFile((LPCWSTR)FileName, GENERIC_READ, 0, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
if (hFile == INVALID_HANDLE_VALUE)
{
cout << "INVALID_HANDLE_VALUE" << endl;
return;
}
}
Run Code Online (Sandbox Code Playgroud)
该程序始终打印"INVALID_HANDLE_VALUE".为什么?文件C:\test2.wav存在.
你误解了铸造是如何工作的.你对编译器说的是假装FileName是一个宽字符串,但不是这样你的代码失败了.两种解决方案
1)使用正确的字符串(在你的情况下宽字符串)
LPTSTR FileName;
FileName = _T("c:\\test2.wav");
hFile = CreateFile(FileName, GENERIC_READ, 0 , 0,
OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
Run Code Online (Sandbox Code Playgroud)
2)使用需要窄字符串的CreateFile版本(称为CreateFileA)
LPSTR FileName;
FileName = "c:\\test2.wav";
hFile = CreateFileA(FileName, GENERIC_READ, 0 , 0,
OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
Run Code Online (Sandbox Code Playgroud)
这是新手代码的一个共同特征,它已经遍布各地.尽量避免投射,因为它通常只是隐藏错误(就像你的演员一样).如果您不了解强制转换的工作方式,则尤其如此.不幸的是,没有一定数量的演员阵容就不可能进行Windows编程.
| 归档时间: |
|
| 查看次数: |
11834 次 |
| 最近记录: |