Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C/C++/Altro] Come funzionano i plugin?

    Ciao
    oggi ho scritto per la prima volta in tutta la mia vita un plugin in C per un'applicazione. E' solo un plugin banale, ma mi ha fatto pensare un po.

    Il programma in questione, aveva bisogno che il plugin avesse una determinata funzione "initialize_plugin" che veniva utilizzata come entry point.

    Poi diceva anche che le variabili globali devono essere dichiarate come static.

    Poi ho visto che tutte le varie funzioni utilizzano un handler, che viene dichiarato globale e viene inizializzato dalla funzione initialize_plugin.

    Ora, chiedo al forum se mi si possono dare altre informazioni circa la struttura di un programma che utilizza i plugin.
    Io parlo del C/C++, ma se ci sono informazioni architetturali Universali, che vanno bene per ogni linguaggio, vanno bene lo stesso.

    Quindi sono interessato a sapere come e' formato il programma principale, con che tecnica un plugin viene aggiunto e gestito dal principale, eccetera.

    Grazie mille
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  2. #2
    Mi interesserebbe viedere il tuo plungin, sempre se vuoi!

    P.S: W LINUX
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  3. #3
    Ok, posto volentieri il codice (bhe, cambio un po le parole, perche' skerzosamente l'ho fatto volgare... se dico che il plugin si chiama "fanculizzati", puoi immaginera cosa faccia quando si da un nick al comando : )

    Pero', ho ancora dei dubbi... per fortuna sono riusto a compilarlo (mi dava un po di problemi), funziona, ma non come volevo.
    codice:
    // header per i plugin di xchat
    #include "xchat-plugin.h"
    
    /**** LE GLOBALI VANNO STATIC ****/
    // handler per il plugin
    static xchat_plugin *ph; 
    // se il plugin e' attivo
    static int enable = 1;
    
    // callback che esegue il comando
    static int saluta_cb(char *word[], char *word_eol[], void *userdata)
    {
    	if (enable)
    		xchat_printf(ph ,"CIAO %s\n", word[2]); // world[2] dovrebbe essere il nick
    	
    	return XCHAT_EAT_NONE;  /* don't eat this event, xchat needs to see it! */
    // ( commento lasciato come l'ho trovato )
    }
    
    static int toggle_saluto(char *word[], char *word_eol[], void *userdata)
    {
       if (!enable)
       {
          enable = 1;
          xchat_print(ph, "Saluto now enabled!\n");
       } else
       {
          enable = 0;
          xchat_print(ph, "Saluto now disabled!\n");
       }
    
       return XCHAT_EAT_ALL;   /* eat this command so xchat and other plugins can't process it */
    }
    
    // questo e' l'entry point del plugin
    int xchat_plugin_init(xchat_plugin *plugin_handle,
                          char **plugin_name,
                          char **plugin_desc,
                          char **plugin_version,
                          char *arg)
    {
       /* we need to save this for use with any xchat_* functions */
    // suppongo sia l'haldler assegnato dal programma principale per l'utilizzo di questo plugin
       ph = plugin_handle;
    
       *plugin_name = "Saluta";
       *plugin_desc = "Saluta the persons u want :)";
       *plugin_version = "0.1";
    
    	// creo un nuovo comando
    	xchat_hook_command(ph, "saluta", XCHAT_PRI_NORM, saluta_cb, "Usage: SALUTA <nick>", 0);
    
    	xchat_hook_command(ph, "SalutoToggle", XCHAT_PRI_NORM, toggle_saluto, "Usage: SALUTOTOGGLE", 0);
    
       xchat_print(ph, "Saluta loaded successfully!\n"); // messaggio di avviso in xchat
    
       return 1;       /* return 1 for success */
    }
    Va compilato come shared object

    La struttura e' semplice ma interessante... piu' o meno si riesce a capire come puo' essere gestito un plugin, ma sarebbe interessante vedere anche il main.

    Se ho un po di tempo magari analizzo direttamente il sorgente di xchat. Spero ci sia un file a parte per i plugin

    ciauz
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  4. #4
    Non so se esista un modo universale di scrivere motori per pulg-ins o cose del genere. Posso dirti cosa farei io: un file di configurazione che dice quali shared functions richiamare all'interno di un determinato modulo. Il motore e i plugin non sono difficili da pensare se ti ci metti un attimo. Basta solo saper lavorare con i file oggetto e poi sei apposto.

    bye
    There are 10 kinds of people in the world: who knows the binary numeration and who not

  5. #5
    ecco, anche questo e' un problema.
    Non ho idea di come possa funzionare una shared object...

    Grazie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.