[c++/gtkmm] als shared library crasht beim reload in xchat



  • hi
    ich wollte ein kleines plugin für xchat mit gtk-dialoge in c++ schreiben
    hab nun allerdins das problem:
    wenn ich folgendes plugin in xchat lade
    und das dialog-fenster starte funktioniert alles bestens

    allerdings wenn man im laufenden xchat dann dieses plugin reloaded (zb weil ich was geändert hab) und dann den dialog starten will
    beendet sich mein xchat auf die nicht übliche art 😉

    weiss hier jemand woran das liegt
    btw viel wichtiger ... wie ich den fehler beheben kann (erbitte einleutende erklährung ,da ich noch nicht so ganz sattelfest in c++ bin 😃 )

    hier mal das testplugin:

    #include <gtkmm.h> 
    // c++ `pkg-config gtkmm-2.4 --cflags --libs` -Wall -O1 -shared -fPIC  gtkmm.cpp -o gtkmm.so
    extern "C" 
    {
       #include "xchat/xchat-plugin.h"
    }
    
    #define PNAME "Test"
    #define PDESC "Blahs";
    #define PVERSION "0.1"
    
    static xchat_plugin *ph; 
    
    Gtk::Main main_obj(0, NULL);
    
    static int test_cb(char *word[], char *word_eol[], void *userdata) 
    { 
        Gtk::Window window_obj; 
        main_obj.run(window_obj); 
        return 0; 
    }
    
    extern "C"
    {
       int xchat_plugin_init(xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version,char *arg);
    }
    
    void xchat_plugin_get_info(char **name, char **desc, char **version, void **reserved)
    {
       *name = PNAME;
       *desc = PDESC;
       *version = PVERSION;
    }
    
    int xchat_plugin_init(xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version,char *arg)
    {
       ph = plugin_handle;
    
       *plugin_name = PNAME;
       *plugin_desc = PDESC;
       *plugin_version = PVERSION;
    
       xchat_hook_command(ph, "test", XCHAT_PRI_NORM, test_cb, "Usage: Test YES", 0);
    
       xchat_print(ph, "Test plugin loaded!\n");
    
       return(1);
    }
    

    in der konsole gestartet bekomme ich beim reload infos wie :

    (xchat:4719): GLib-GObject-WARNING **: cannot register existing type `gtkmm__PangoContext'
    
    (xchat:4719): GLib-GObject-WARNING **: cannot register existing type `gtkmm__PangoFont'
    
    (xchat:4719): GLib-GObject-WARNING **: cannot register existing type `gtkmm__PangoFontFace'
    
    (xchat:4719): GLib-GObject-WARNING **: cannot register existing type `gtkmm__PangoFontFamily'
    

  • Mod

    Hm, evtl. musst du den Plugin vorher "entladen".



  • genau das mein ich ja

    ob ich es nun direkt reloade

    oder erst entlade und dann wieder neu lade macht keinen unterschied


Anmelden zum Antworten