1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2007
    Messages : 2
    Points : 2
    Points
    2

    Par défaut C, GTK+ et postgresql : récupérer le pointeur de connexion.

    Bonjour,
    Je suis en train d'explorer l'utilisation de postgresql pour stocker des données que l'utilisateur va saisir via un programme C/GTK+.
    Le prototype fonctionne très bien.
    Pour coller un peu plus aux recommandations du "gnome developper center", j'ai voulu faire ça, sans trop réfléchir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    int main (int argc, char *argv[])
    {
        GtkApplication *appli;
        int statut;
        PGconn *conn = NULL;
     
        appli = gtk_application_new("TiArn.Nantoo.PConstantes", G_APPLICATION_FLAGS_NONE);
        g_signal_connect(appli, "startup", G_CALLBACK(connexiondb), conn);
        g_signal_connect(appli, "activate", G_CALLBACK(cb_vueprincipale), conn);
        g_signal_connect(appli, "shutdown", G_CALLBACK(deconnexiondb), conn);
        statut = g_application_run(G_APPLICATION(appli), argc, argv);
        g_object_unref(appli);
     
    	return statut;
    }
    Mon problème :
    Comment récupérer le pointer de la connexion à ma database que j'ai initié via le signal "startup" ?
    La doc est assez pauvre sur le sujet et je me demande comment passer ce pointeur au signal "activate" ?
    Quand j'utilise le code ci-dessus, le signal "activate" passe en paramètre le pointer conn qui a pour valeur NULL.

    Merci par avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : septembre 2017
    Messages : 8
    Points : 11
    Points
    11

    Par défaut

    Bonsoir,

    Peut-être ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    typedef struct _MyApp {
        PGconn *conn;
    } MyApp;
     
    int main (int argc, char *argv[])
    {
        GtkApplication *appli;
        int statut;
        MyApp *conn = g_new0(MyApp);
     
        appli = gtk_application_new("TiArn.Nantoo.PConstantes", G_APPLICATION_FLAGS_NONE);
        g_signal_connect(appli, "startup", G_CALLBACK(connexiondb), conn);
        g_signal_connect(appli, "activate", G_CALLBACK(cb_vueprincipale), conn);
        g_signal_connect(appli, "shutdown", G_CALLBACK(deconnexiondb), conn);
        statut = g_application_run(G_APPLICATION(appli), argc, argv);
        g_object_unref(appli);
     
    	return statut;
    }
    Ou tout simplement en passant un pointeur de pointer g_signal_connect(appli, "startup", G_CALLBACK(connexiondb), (gpointer)&conn);:

    Bye

  3. #3
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 259
    Points : 1 866
    Points
    1 866

    Par défaut

    La bonne méthode est effectivement soit de passer par une structure qui contiendra les différents éléments de ton application, et où tu pourras initialiser un champ correspondant au pointeur vers ta connexion. L'autre solution si c'est la seule information que tu as à échanger, c'est d'utiliser un pointeur de pointeur (sans le cast en gpointer, qui est inutile). Si tu n'as pas trop l'habitude, l'endroit où c'est le plus utilisé dans l'API GLIb, GTK c'est pour GError. Les fonctions qui veulent renvoyer une erreur renvoient un booléen pour savoir si l'appel a fonctionné ou pas, et un GError pour avoir plus d'information. Pour cela on leur passe l'adresse d'un pointeur, qu'elles initialisent au besoin.

    Et parce que les pointeurs c'est fun:
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2007
    Messages : 2
    Points : 2
    Points
    2

    Par défaut

    Merci beaucoup à vous deux.
    Le pointeur de pointeur me convient très bien. C'est l'idéal pour ce que je veux faire.
    Encore merci et bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/02/2007, 11h48
  2. GTK+ comparaison entier valeur du pointeur
    Par Emyleet dans le forum GTK+
    Réponses: 10
    Dernier message: 21/07/2006, 16h28
  3. [PostGreSQL] Récupérer les noms des colonnes
    Par Olivier14 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/02/2006, 19h51
  4. Réponses: 14
    Dernier message: 14/03/2005, 10h16
  5. [Ada] Récupérer un pointeur sur un objet existant
    Par vincnet500 dans le forum Ada
    Réponses: 1
    Dernier message: 14/11/2004, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo