Bonjour,
Je travaille actuellement sur une appli windows/linux qui fonctionne avec GTK et cairo (cairo me sert à faire un widget graphique à partir d'un DrawingArea). Mon appli fonctionne sur les deux plateformes sans problème.
Seulement voila, j'ai voulu la porter à gtkmm, et depuis elle ne fonctionne plus sous windows (aucun prob sous linux par contre).
En gros si je la lance sans le debugger, elle crashe toute seule très rapidement, après quelques redraw de mon widget (90% dès le premier). Si j'execute en debug, l'appli déclenche un breakpoint toute seule qui me ramène sur du code assembleur, à l'instruction :
J'ai vérifié, ce code assembleur correspond justement au déclenchement manuel d'un breakpoint.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 7C911230 int 3
En limitant les parties de codes à être executé, j'ai remarqué que le breakpoint ou le crash ont la même origine, dans ma fonction de rendu :
Il s'agit de en fait du déréférencement de la variable cr (l'appel à son destructeur, donc), à la fin de la fonction où se trouve ce code. Si je m'arrange pour que cr soit sauvegardé en global, et donc qu'il ne soit pas déréférencé à la fin du traitement de l'affichage, le programme ne crash qu'à la fermeture (lorsque la variable globale est déréférencé).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Glib::RefPtr<Gdk::Window> window = get_window(); if ( !window ) return ERR_UNINITIALIZED_OBJECT; Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
Je répète que mon code fonctionnait très bien sous GTK+/cairo, et que je n'ai fait que porter les appels de fonction. Il fonctionne également sous linux avec gtkmm/cairomm, c'est pour ca que je pense qu'il s'agit d'un problème avec le compilo de windows ou une histoire de link incorrect...
J'utilise Visual Studio Express 2008.
Si quelqu'un a une idée de la raison de ce problème, voir une ébauche de solution, je prend ! =)
Merci.
Partager