Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1654 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C+GTK]Résultat diff qd une fonction est lancé par une interface graph

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C+GTK]Résultat diff qd une fonction est lancé par une interface graph

n°1406261
ThibB
Posté le 13-07-2006 à 12:26:18  profilanswer
 

Salut tous le monde !
 
J'aurais besoin de votre aide sur un problème des plus étrange : je travail sur un programme C effectuant une conversion de format de fichier (en gros lecture d'un fichier source et ecriture de fichier de destination ds un autre format), ce programme fonctionne parfaitement sans utiliser d'interface graphique mais ne fonctionne plus avec l'interface graphique GTK...
 
Je m'explique : pour faire au plus simple j'ai créé une fonction "int traitementAll (char* nomFichier, GtkWidget* pProgress)" qui s'occupe de réaliser tous les traitements et rend un code indiquant si l'opération s'est bien passée (1) ou un code d'erreur particulier. Le premier paramètre est le nom avec le chemin d'accès au fichier source et le second la référence à un widget "progress bar" permettant de suivre l'avancement du traitement de manière visuel.
 
Mon problème est le suivant : si j'exécute cette fonction dans un programme entierement DOS (pas de GTK) en ayant bien sur viré le "GtkWidget* pProgress" et j'affiche le resultat, j'obtient toujours ce qu'il faut a savoir 1. Le traitement est bien effectué (j'ai vérifier les données de sorties etc).
Si par contre j'exécute cette meme fonction dans un programme disposant d'une interface graphique GTK (quand on clique sur un bouton) l'un des sous traitement ne fonctionnera pas systématiquement ou presque (renvoie d'un code d'erreur). Et le pire c'est que sur une 10aine d'exécution j'obtiendrais des résultats différents avec parfois des traitement effectués correctement ...
Les deux programmes utilisent bien sur les même fichiers source (sauf celui pr l'interface graph/dos) et sont exécuter au même endroit en utilisant le même fichier source.
 
J'ai effectuer ces tests sur 2 ordinateurs différents tournant sous XP, même résultats.
Pour infos j'avais déja réalisé un programme de ce type et la transition DOS --> GTK n'avait posé aucun problème
 
Infos technique :
IDE --> DevC++ 4.9.9.2
Compilateur --> GCC 3.4.2
Glib 2.6.6
Gtk+ 2.6.9
atk 1.9.0
pango 1.8.2
 
Code simplifié :
Graphique :

Code :
  1. void OnButtonConvertir(GtkWidget *pWidget, gpointer data){
  2. gchar* sUtf8;
  3. int res;
  4. char mess[256];
  5. res = traitementAll("c:\\blabla\\fichiersource.txt", pApp->pProgress); // pApp->pProgress  = var globale       
  6.    
  7. switch (res){   
  8.        case 1:
  9.             break;     
  10.        case -1:
  11.             snprintf(mess,256,"Erreur 1\n" );
  12.             break;
  13.        case -2:
  14.             snprintf(mess,256,"Erreur 2" );
  15.             break;
  16.        case -3:
  17.             snprintf(mess,256,"Erreur 3" );
  18.             break;
  19.        case -4:
  20.             snprintf(mess,256,"Erreur 4" );
  21.             break;
  22.        case -6:
  23.             snprintf(mess,256,"Erreur 5" );
  24.             break;
  25.        default:
  26.             snprintf(mess,256,"Erreur pendant le traitement. Code : %d",res);
  27.             break;
  28.        }
  29. if (res != 1){
  30.        sUtf8 = g_locale_to_utf8(mess, -1, NULL, NULL, NULL);
  31.        pError = gtk_message_dialog_new (GTK_WINDOW(data),
  32.                                           GTK_DIALOG_MODAL,
  33.                                           GTK_MESSAGE_ERROR,
  34.                                           GTK_BUTTONS_OK,
  35.                                           sUtf8);   
  36.        /* Affichage de la boite de message */
  37.        gtk_dialog_run(GTK_DIALOG(pError));
  38.        /* Destruction de la boite de message */
  39.        gtk_widget_destroy(pError);
  40.        }
  41. if (res == 1){
  42.        sUtf8 = g_locale_to_utf8("Le traitement d'importation a réussi.\nOK pour continuer.", -1, NULL, NULL, NULL); 
  43.        pFini = gtk_message_dialog_new (GTK_WINDOW(data),
  44.                                           GTK_DIALOG_MODAL,
  45.                                           GTK_MESSAGE_INFO,
  46.                                           GTK_BUTTONS_OK,
  47.                                           sUtf8);
  48.        /* Affichage de la boite de message */
  49.        gtk_dialog_run(GTK_DIALOG(pFini));
  50.        /* Destruction de la boite de message */
  51.        gtk_widget_destroy(pFini);
  52.        }
  53.     g_free(sUtf8);
  54. }


 
DOS :

Code :
  1. int main(int argc, char *argv[]){
  2. int res;
  3. res = traitementAll("c:\\blabla\\fichiersource.txt" );     
  4.    
  5. switch (res){   
  6.        case 1:
  7.             break;     
  8.        case -1:
  9.             snprintf(mess,256,"Erreur 1\n" );
  10.             break;
  11.        case -2:
  12.             snprintf(mess,256,"Erreur 2" );
  13.             break;
  14.        case -3:
  15.             snprintf(mess,256,"Erreur 3" );
  16.             break;
  17.        case -4:
  18.             snprintf(mess,256,"Erreur 4" );
  19.             break;
  20.        case -6:
  21.             snprintf(mess,256,"Erreur 5" );
  22.             break;
  23.        default:
  24.             snprintf(mess,256,"Erreur pendant le traitement. Code : %d",res);
  25.             break;
  26.        }
  27. printf("%s\n",mess);
  28. return EXIT_SUCCESS;
  29. }


 
Si vous avez besoin d'autres infos (j'en ai surement oubliées) demandez moi. :-)  
 
Merci !!!


Message édité par ThibB le 13-07-2006 à 13:18:24

---------------
Visiter mon site
mood
Publicité
Posté le 13-07-2006 à 12:26:18  profilanswer
 

n°1406280
ThibB
Posté le 13-07-2006 à 13:18:51  profilanswer
 

J'ai ajouté le code des fonctions appelantes si ca peut aider ...


---------------
Visiter mon site
n°1407305
ThibB
Posté le 15-07-2006 à 22:19:21  profilanswer
 

Personne n'a d'idées ?


---------------
Visiter mon site
n°1413916
ThibB
Posté le 26-07-2006 à 15:10:03  profilanswer
 

Problème résolu, j'ai trouvé la solution !
Voila donc ce que j'ai fait pour ceux qui rencontrerais ce type de problèmes ...
 
Le problème venais en fait de l'utilisation de la fonction sscanf, qui est très capricieuse ...
 
J'utilisais cette fonction pour lire ligne par ligne un fichier en identificant 7 valeurs (entiers,chaines et réels) et celle ci fonctionnait correctement en utilisant un programme "DOS" mais posait problème quand lancé par une fonction de l'interface GTK, associée au click sur un bouton : elle renvoyait systematiquement une valeur différente de 7 ...
 
Je me suis donc arranger pour séparer chacun des champs à identifier dans un buffer et j'ai utiliser le sscanf sur ce buffer (1 valeur à identifier à la fois). Et la miracle ca fonctionne !
Forcement le programme est beaucoup plus lourd (7 appels successif à sscanf au lieu d'un seul) mais au moin ca fonctionne aussi bien sous DOS qu'avec l'interface graphique !


---------------
Visiter mon site
n°1579105
amieboss
Posté le 26-06-2007 à 03:25:39  profilanswer
 

ou es les include lol stp préciser le je suis un deutemp  
 

n°1579214
Taz
bisounours-codeur
Posté le 26-06-2007 à 11:25:25  profilanswer
 

tout ça pas bon du tout. tu dois découpler ton interface graphique de tes traitements


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C+GTK]Résultat diff qd une fonction est lancé par une interface graph

 

Sujets relatifs
[VB] Arrêter l'exécution d'une fonctionAutomatiser fonction d'envoi de mails via site
affiche une page ou en autre en fonction d'une conditionfonction TRONQUE résolu
Probleme avec la fonction DATACHANGEDincompréhension avec la fonction Instr
Fonction remplacement ne fonctionne pas !fonction dans un lien php
Fonction qui retourne une collection d'objets[SGDB] PL/SQL : Fonction qui retourne un curseur
Plus de sujets relatifs à : [C+GTK]Résultat diff qd une fonction est lancé par une interface graph


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR