nervige dos box bei gtkmm



  • hi,

    hab hier schon geschaut aber keinen hinweis gefunden (googeln half auch nicht so richtig weiter). Deshalb hoffe koennt helfen:

    Weiss jemand, ob es moeglich ist die bei gtkmm anwendungen aufpoppende Dos-Box unter Visual Studio 2005 wegzubekommen?

    Anwendungs-Typ ist (wie in diversen tutorials beschrieben) auf win-konsole erstellt worden.

    bei ner gui-anwendung ist die dos-box eher stoerend.

    wie kriege ich die weg, oder geht das ueberhaupt!?!?

    vielen dank.
    gruss



  • auf Windows Anwendung stellen und nicht auf Konsole 😉



  • danke fuer den tipp.
    jedoch ist folgendes beispiel-programm und einer voreingestellten win32-anwendung unter visual2005 nicht uebersetzbar:

    #include <gtkmm.h>
    
    int main(int argc, char *argv[])
    {
      Gtk::Main kit(argc, argv);
      Gtk::Window window;
      Gtk::Main::run(window);    
      return 0;
    }
    

    also was tun?
    danke.



  • "Nicht übersetzbar" ist keine Fehlerbeschreibung. Oder können wir hellsehen?



  • "main()" heisst dann "WinMain()"



  • vorab danke fuer die replys.
    ich glaube es funzt doch, bis auf eine zeile wo mein compiler uebergebene parameter bemaengelt (siehe unten kommentar im code).
    da ich kein WINAPI mensch bin, weiss ich nicht was statt argc, und argv zu uebergeben ist!? kleiner tipp waere grossartig.

    hier mein (kurzer) code fuers testen der gtkmm -> win32 anwendung in visual 2003
    und den vorlagen code wie folgt geaendert:

    #include <gtkmm.h>
    
    #include "stdafx.h"
    #include "nokma.h"
    
    #define MAX_LOADSTRING 100
    HINSTANCE hInst;			// Aktuelle Instanz
    TCHAR szTitle[MAX_LOADSTRING];		// Titelleistentext
    TCHAR szWindowClass[MAX_LOADSTRING];	// Klassenname des Hauptfensters
    int APIENTRY _tWinMain( HINSTANCE hInstance,
                            HINSTANCE hPrevInstance,
                            LPTSTR    lpCmdLine,
                            int       nCmdShow)
    {
        //Gtk::Main kit(argc, argv);
    
        Gtk::Main kit(nCmdShow, lpCmdLine);  // wie muesste es hier heissen!?!?
    
        Gtk::Window window;
    
        Gtk::Main::run(window);
    
      return 0;
    }
    

    vielen dank.
    gruss.



  • ok habs selbst rausgefunden. trotzdem danke.

    man kann durch die globalen variablen __argv und __argc das erwuenschte erzielen:

    #include <gtkmm.h>
    
    #include "stdafx.h"
    #include "nokma.h"
    #define MAX_LOADSTRING 100
    HINSTANCE hInst;			// Aktuelle Instanz
    TCHAR szTitle[MAX_LOADSTRING];		// Titelleistentext
    TCHAR szWindowClass[MAX_LOADSTRING];	// Klassenname des Hauptfensters
    
    // Vorwärtsdeklarationen der in diesem Codemodul enthaltenen Funktionen:
    //ATOM				MyRegisterClass(HINSTANCE hInstance);
    //BOOL				InitInstance(HINSTANCE, int);
    //LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
    //LRESULT CALLBACK	About(HWND, UINT, WPARAM, LPARAM);
    extern int __argc;
    extern char ** __argv;
    int APIENTRY _tWinMain( HINSTANCE hInstance,
                            HINSTANCE hPrevInstance,
                            LPTSTR    lpCmdLine,
                            int       nCmdShow)
    {
        Gtk::Main kit(__argc, __argv);
    
        Gtk::Window window;
    
        Gtk::Main::run(window);
    
      return 0;
    }
    

    dann funzt es.

    gruss.



  • Es geht auch viel einfacher:

    #include <gtkmm.h>
    #include <cstdlib>
    
    #ifdef __WIN32
    #include <windows.h>
    #endif
    
    int main(int argc, char **argv) {
    #ifdef __WIN32
        FreeConsole();
    #endif
    
      //Start gtkmm app
      Gtk::Main m(argc, argv);  
      Gtk::Window w;
      m.run(w);
    
      return EXIT_SUCCESS;
    }
    


  • GPC schrieb:

    Es geht auch viel einfacher:

    #include <gtkmm.h>
    #include <cstdlib>
    
    #ifdef __WIN32
    #include <windows.h>
    #endif
     
    int main(int argc, char **argv) {
    #ifdef __WIN32
        FreeConsole();
    #endif
    
      //Start gtkmm app
      Gtk::Main m(argc, argv);  
      Gtk::Window w;
      m.run(w);
    
      return EXIT_SUCCESS;
    }
    

    Code wird für die Konsole aber mitgelinkt und dadurch wird die Binärdatei um ca. 200 KB größer (zumindestens bei MinGW). Also bei MinGW gibt's nen Parameter (-mwindows glaub ich) mit dem kann man das Terminal ausstellen, ohne dass man WinMain verwenden muss.



  • joomoo schrieb:

    Code wird für die Konsole aber mitgelinkt und dadurch wird die Binärdatei um ca. 200 KB größer (zumindestens bei MinGW). Also bei MinGW gibt's nen Parameter (-mwindows glaub ich) mit dem kann man das Terminal ausstellen, ohne dass man WinMain verwenden muss.

    Hm, gut möglich, aber hier war der Compiler ja der VC... und was sind schon 200kb 😉


Anmelden zum Antworten