Mein Projekt wird vom Multi-Byte-Zeichensatzprojekt in den Unicode-Zeichensatz geändert. Daher müssen viele Variablentypen konvertiert werden, um dem Typ des Parameters zu entsprechen. Ich habe eine Funktion erstellt, um char[]
in LPWSTR
umzuwandeln. Unten ist der Code:Schreibort für Zugriffsverletzung in einer Funktion des Unicode-Zeichensatzprojekts
LPWSTR CharFunction::CharToLPWSTR(char charVariable[])
{
LPWSTR returnVariable;
MultiByteToWideChar(CP_UTF8, 0, charVariable, -1, returnVariable, 2048);
return returnVariable;
}
Allerdings gibt es
Unbehandelte Ausnahme bei 0x77a9007e in xxxx.exe: 0xC0000005: Zugriffsverletzung Schreibort 0x7712311e.
fand ich, dass es erstmals ausgeführt werden können, aber der Fehler tritt bei zweiten Mal bei
MultiByteToWideChar(CP_UTF8, 0, charVariable, -1, returnVariable, 2048);
ich verbringen 3 Stunden debug, aber kein Glück. Ich würde es begrüßen, wenn mir jemand helfen könnte, diesen Fehler zu beheben. Vielen Dank.
Aktualisiert:
Unten ist der Code-Schnipsel die Variable und das Bestehen des Wertes an die Funktion zu erklären.
LPWSTR g_szSystemIni;
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
_splitpath_s(szModuleName_converted, drive, _MAX_DRIVE, dir, _MAX_DIR, fname, _MAX_FNAME, ext, _MAX_EXT);
lstrcpy(g_szSystemIni,charfunction.CharToLPWSTR(drive));
lstrcat(g_szSystemIni,charfunction.CharToLPWSTR(dir));
Wo weisen Sie den Zielpuffer zu? – ZDF
10 'returnVariable' zeigt nirgendwo hin, aber Sie haben Windows gesagt, dass es 2048 Zeichen lang ist! – user657267
Wenn Sie MFC verwenden, verwenden Sie einfach CStringW: CStringW ("Ascii"). – ZDF