CreateFile() INVALID_HANDLE_VALUE zurückgibt (C++)
Betrachten:
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;
}
}
Dieses Programm immer drucken "INVALID_HANDLE_VALUE". Warum? Datei C:\test2.wav
vorhanden ist.
- Umwandlung von einer Zeichenfolge in einen wide-string FUNKTIONIERT NICHT!
- Genauer, Gießen ein
LPSTR
zu einemLPWSTR
funktioniert nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verkennst du, wie casting funktioniert. Was Sie sagen, für den compiler ist, zu behaupten, dass mit dem Namen ist eine große Zeichenfolge, aber es ist nicht so dass Ihr code nicht funktioniert. Zwei Lösungen
1) Verwenden Sie die richtige Art von Zeichenfolge (einen wide-string in deinem Fall)
2) Verwenden Sie die version von CreateFile (genannt CreateFileA), die erfordert, dass Sie einen schmalen string
Es ist ein gemeinsames Merkmal der newbie-code, den Sie hat, wirft Sie alle über dem Platz. Versuchen Sie zu vermeiden, Gießen, da es oft nur versteckt Fehler (wie Ihr gewirkt hat). Dies gilt insbesondere, wenn Sie nicht verstehen, wie CASTET Arbeit. Leider ist es nicht möglich, Windows-Programmierung, ohne eine bestimmte Anzahl von Würfen.
Können Sie nicht nur werfen ein multibyte - /ASCII/UTF-8-string in ein breit/UTF-16-string. Sie haben tatsächlich zu konvertieren. Versuchen Sie es mit
MultiByteToWideChar()
zu konvertieren. Die anderen Antworten reden über verschiedene Versionen vonCreateFile
sind wahrscheinlich die einfachste, aber nur für den Fall, Sie wirklich brauchen, wide-character-Zeichenfolgen dies kann nützlich sein, zu wissen.