Autore: Fabio Di Matteo
Ultima revisione: 24/12/2009
Scenario: (facendo riferimento all'articolo Sviluppare con Libglade) spesso capita di dovere distribuire una directory contenente eseguibile e file glade per l'interfaccia grafica. Il nostro eseguibile quindi deve poter trovare il file contenente l'interfaccia grafica da qualunque percorso esso sia lanciato.
Quando si deve caricare un file generato da glade si usa spesso del codice di questo tipo:
... /* Carica l'interfaccia dal file di glade */ xml = glade_xml_new ("interfaccia.glade", NULL, NULL); ...
Se lanciamo a questo punto il nostro eseguibile dalla directory dello stesso, nessun problema l'eseguibile si avvia correttamente, ma se lanciamo l'eseguibile da un'altra directory otterremmo un messaggio del genere:
libglade-WARNING **: could not find glade file 'interfaccia.glade'
che ci avverte del fatto che libglade non e' in grado di trovare il nostro file interfaccia.glade
.
Se utilizziamo le seguenti istruzioni invece il file viene sempre trovato in maniera corretta purche' resti nella stessa directory dell'eseguibile
... /*Carica l'interfaccia dal file glade*/ /*Ricava il percorso dell'eseguibile, senza il nome del file*/ gchar* base = g_path_get_dirname(argv[0]); /*Concatena il percorso base al nome file "interfaccia.glade"*/ gchar* glade_file = g_build_filename (base, "interfaccia.glade", NULL); /*Infine carica come disolito il file dell'interfaccia */ xml = glade_xml_new(glade_file, NULL, NULL); ...
... gchar* base; gchar* glade_file; //se il programma NON e' in path if (g_find_program_in_path ("eseguibile.bin")==NULL){ /*Ricava il percorso dell'eseguibile, senza il nome del file */ base = g_path_get_dirname(argv[0]); /*Concatena il percorso base al nome file gui.glade */ glade_file = g_build_filename (base,"../share/progetto", "gui.glade", NULL); }else{ base = g_path_get_dirname(g_find_program_in_path ("eseguibile.bin")); glade_file = g_build_filename (base,"../share/progetto", "gui.glade", NULL); } ...
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.