Um in das neue Jahrtausend zu kommen, habe ich meinen C++-Code mit neu geschrieben:
int main(int argc, wchar_t **argv)
Wenn die Anwendung mit Unicode- oder MBCS-Optionen gebaut wurde, dann sind die an argv[] übergebenen Dateinamen unlesbar = in einer Mischung aus chinesischen Schriftarten, wenn die Anwendung mit einem Kommandozeilenarg ausgeführt wird, entweder direkt oder per Doppelklick.
Danke für die Kommentare - ich werde versuchen, sie hier für die Suchmaschine zusammenzufassen.
-
wmain(int argc,char **argv)
kann nur für eine Kommandozeilenanwendung (subsystem:console) verwendet werden -
int winMain(int argc, wchar_t **argv)
funktioniert für eine GUI (subsystem:Windows), aber die GUI ersetzt ihn durch ihren eigenen Einstiegspunkt. Im Falle von Qt funktioniert das nichtqtmaind.lib(qtmain_win.obj) : Fehler LNK2019: nicht aufgelöstes externes Symbol _main referenziert in Funktion _WinMain@16
Die Lösung scheint zu sein main(int arc,char **argv)
oder main(int argc,wchar_t**argv)
aber ignorieren Sie die argv. Dann rufen Sie QApplication mit argv oder NULL auf - das argv wird ignoriert, da Qt intern GetCommandLine() aufruft.
Verwenden Sie dann app.arguments, um die geparsten Argumente zurückzugeben.
Diese können dann bei Bedarf mit den String-Funktionen von Qt wieder in wchar konvertiert werden.
QApplication app(argc, (char**)argv); or QApplication app(argc,NULL);
QStringList args = app.arguments();
Tut mir leid, dass ich dieses Qt ursprünglich nicht gekennzeichnet habe, weil ich nicht dachte, dass es relevant ist.
Wenn jemand dies bearbeiten möchte, um auch zu zeigen, wie man dies in MFC macht, bitte.