WinMain mit main überschreiben



  • Wie kann man die WinMain-Funktion in einer Windows-Anwendung mit der main-Funktion überschreiben, die sonst bei Konsolenprogrammen verwendet wird? (wie bei SDL)



  • Das geht nicht, die Funktion muss zwar nicht WinMain heißen, aber die Parameterliste und der Rückgabewert sind fest.

    Mach doch einfach sowas:

    int main( int argc, char* argv[] )
    {
      //dein programm
    
      return 0;
    }
    
    int WinMain( HINSTANCE, HINSTANCE, LPCSTR, int )
    {
       //geht so nicht bei allen Compilern, musst ggf. selber die Commandozeile parsen
       return main( __argc, __argv );
    }
    

    Aber warum willst du das so haben?



  • ich hätte da ne Möglichkeit für dich, wie du auch bei ner Windows-Anwendung die normale main-Funktion nutzen kannst (du verwendest natürlich trotzdem noch die WinMain, aber sieh selbst):

    #include <windows.h>
    
    int main(int argc, char** argv) {
    	// Hier Code für das Hauptprogramm einfügen
    	return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) {
    	LPWSTR cmdline = GetCommandLineW();
    	int iArgc;
    	LPWSTR* szArgvW = CommandLineToArgvW(cmdline, &iArgc);
    	char** szArgvA = new char*[iArgc];
    	for (int n = 0; n < iArgc; n++) {
    		szArgvA[n] = new char[128];
    		WideCharToMultiByte(CP_ACP, 0, szArgvW[n], -1, szArgvA[n], 128, NULL, NULL);
    	}
    	LocalFree(szArgvW);
    	int ret = main(iArgc, szArgvA);
    	for (int m = 0; m < iArgc; m++)
    		delete[] szArgvA[m];
    	delete[] szArgvA;
    	return ret;
    }
    


  • http://gombolo.go.funpic.de/gidx/

    Die machen das auch. Frag die halt mal. 🙄



  • Aber warum willst du das so haben?

    Ich will statt der ganzen Commandline die Parameter einzeln haben.

    Mit __argc und __argv funktionierts. Danke! 🙂



  • ProGamer.Coder schrieb:

    Wie kann man die WinMain-Funktion in einer Windows-Anwendung mit der main-Funktion überschreiben, die sonst bei Konsolenprogrammen verwendet wird? (wie bei SDL)

    Warum willst Du das denn überhaupt machen ?


Anmelden zum Antworten