2011-01-24 17 views
5

tengo un software en C++ MFC que tiene alguna interfaz pública para el complemento que usa C export.La mejor manera de implementar la compatibilidad de complementos

Estoy a punto de abrir el software para el desarrollo externo de 3 partes. Pero usar una exportación C es para programadores hardcore.

¿Cuál es la mejor manera de implementarlo? Escuché sobre LUA, pero quiero saber sobre otras posibilidades.

Respuesta

0

Si tiene C exportar ejemplos de programación que funcionan para usted, le sugiero que deje de lado sus nociones preconcebidas de "hardcore" y como dice Nike "solo hágalo".

Puede ser más fácil de lo que esperaba.

+0

Pero debería "atraer" a los desarrolladores al proyecto. Y para Sure C Export no son para los desarrolladores de hoy en día. – bratao

+0

Incluso si está cortado y pegado? –

3

Creo que esto realmente depende del tipo de programa y su público objetivo. WoW seguro no tendría tantos complementos como lo hizo si hubiera requerido C y un compilador para escribirlos. Pero estoy seguro de que no me gustaría escribir un gran complemento en Lua.

Por lo tanto, antes que nada, debe decidir si desea utilizar un lenguaje de scripting o un lenguaje compilado. Si se dirige a usuarios ocasionales, entonces un lenguaje de scripting podría ser una mejor opción. Si se dirige a desarrolladores profesionales (por ejemplo, un paquete financiero cuyos complementos son desarrollados por programadores internos), entonces el lenguaje compilado podría funcionar mejor.

Ah, y también, ¿por qué no le preguntas a un grupo de potenciales desarrolladores de complementos?

+0

Gracias por la respuesta, pero el software se lanzará a la corriente principal como un software gratuito. Así que todavía no tengo desarrolladores de complementos potenciales, pero quiero mantener las cosas lo más fáciles posible para atraerlos. – bratao

+0

@bratao si no tiene ningún desarrollador _yet_, y la interfaz C ya está hecha, entonces diría que primero la lanzamos, y luego veremos cuánta demanda hay para otros entornos de plugins. –

0

se utiliza una convención de nomenclatura de C y el dlopen\LoadLibrary familia de funciones para cargar un plugin (.dll o .so), encontrar los 3 métodos necesarios (create_plugin(), destroy_plugin() y get_type().

Un plug-in implementador meramente tiene que asegurarse de que el equivalente (en el idioma que utilizan) es visibile en la 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(); 

Dependiendo de lo que necesita el plugin para hacerlo, arg_pack puede ser reemplazado con argumentos específicos.

Consulte la documentación del [gmodule][1] para ver una biblioteca multiplataforma para hacer este tipo de cosas.

0

implementar una interfaz binario utilizando funciones de C exportados para crear e interfaces volver.

// 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**); 

A continuación, poner en práctica un ejemplo de plugins como un puente Lua/Javascript/Python, y el paquete que con su software. Fuera de la caja se admite tanto una interfaz estrechamente acoplada de C++, ADEMÁS de una interfaz de complementos altamente programable, Y, si alguien prefiere una secuencia de comandos diferente, pueden hacerlo ellos mismos.

Cuestiones relacionadas