2011-01-24 18 views
5

Ho un software in C++ MFC che ha un'interfaccia pubblica per plugin che usa le esportazioni C.Il modo migliore per implementare il supporto per i plug-in

Io in procinto di aprire il software per lo sviluppo di 3 utente esterno. Ma usare un'esportazione C è per programmatori esperti.

Qual è il modo migliore per implementarlo? Ho sentito parlare di LUA, ma voglio sapere altre possibilità.

risposta

0

Se si dispone di esempi di programmazione di esportazione C che funzionano per voi, suggerisco di mettere da parte le nozioni pre-concepite "hardcore" e come dice Nike "fallo e basta".

Può anche essere più facile del previsto.

+0

Ma dovrei "attirare" gli sviluppatori sul progetto. E per Sure C Export non sono per gli sviluppatori di oggi. – bratao

+0

Anche se è taglia e incolla? –

3

Credo che questo dipende molto dal tipo di programma e il pubblico di destinazione. WoW sicuramente non avrebbe tanti addon quanti ne avrebbe richiesto C e un compilatore per scriverli. Ma di sicuro non vorrei scrivere un grosso addon a Lua.

Quindi, prima di ogni altra cosa è necessario decidere se si desidera utilizzare un linguaggio di scripting o una lingua compilata. Se scegli come target utenti occasionali, un linguaggio di scripting potrebbe essere una scelta migliore. Se scegli come target gli sviluppatori professionisti (ad esempio, un pacchetto finanziario i cui componenti aggiuntivi sono sviluppati da programmatori interni), la lingua compilata potrebbe funzionare meglio.

Oh, e anche - perché non chiedi a un gruppo di potenziali sviluppatori di plug-in?

+0

Grazie per la risposta, ma il software verrà rilasciato come software libero. Quindi non ho ancora potenziali sviluppatori di plugin, ma voglio mantenere le cose il più semplici possibile per attirarli. – bratao

+0

@bratao se non ci sono sviluppatori _yet_, e l'interfaccia C è già fatta, quindi direi prima il rilascio e poi vedere quanta domanda c'è per qualsiasi altro ambiente di plugin. –

0

Usiamo una convenzione c-naming e la dlopen\LoadLibrary famiglia di funzioni per caricare un plugin (DLL o .so), trovare le 3 metodi necessari (create_plugin(), destroy_plugin() e get_type().

Un realizzatore plug meramente deve fare in modo che l'equivalente (in qualsiasi lingua che usano) è visibile nella biblioteca

extern "C" PLUGIN_API plugin_interface* create_plugin(arg_pack*); 
extern "C" PLUGIN_API void destroy_plugin(plugin_interface*); 
extern "C" PLUGIN_API const char* get_type(); 

a seconda di cosa è necessario il plugin per fare, arg_pack può essere sostituita con argomenti specifici.

Consultare la documentazione per [gmodule][1] per visualizzare una libreria multipiattaforma per eseguire questo tipo di operazione.

0

implementare un'interfaccia binario utilizzando funzioni C esportate per creare e restituire interfacce.

// your_plugin_header 

// Plugins must implement this interface 
struct PluginInterface { 
    virtual void Release()=0; 
    virtual void Method()=0; 
    virtual void Method2()=0; 
}; 


// Plugin dll's must export this function that creates a new object that implements 
// the PluginInterface; 
extern "C" bool CreatePluginObject(PluginInterface**); 

Quindi, implementare un esempio Plugin come un ponte Lua/Javascript/Python, e bundle che con il software. Out the box supporta sia un'interfaccia C++ strettamente accoppiata, PLUS un'interfaccia plugin altamente programmabile, E, se qualcuno preferisce uno script diverso, può farlo da solo.

Problemi correlati