Recomendación para C ++ envoltura para multiplataforma enlaces de biblioteca dinámica en proceso (es decir, un peso ligero, COM de alto rendimiento o CORBA) [cerrada]

StackOverflow https://stackoverflow.com/questions/1854323

Pregunta

Estamos desarrollando una aplicación que tendrá una "arquitectura" plug-in para permitir a los consumidores de que la aplicación proporcione sus propios algoritmos propietarios. (Nosotros, básicamente, tienen un conjunto de programas de análisis y permitir que terceros proporcionan su propia también)

El espacio de dominio requiere un rendimiento muy alto, por lo que fuera de proceso de fijaciones no van a trabajar y preferimos dejar las cosas de peso pesado como CORBA y COM sola.

Básicamente estamos buscando un simple envoltorio multiplataforma en torno a:

  • biblioteca de carga de una ruta relativa
  • proporcionar un mapeo de la DLL en particular / .so a alguna configuración / nombre
  • hacer algo de inicialización y consultar la biblioteca para asegurarse de que proporciona la funcionalidad necesaria

Creo que esto es realmente sólo una envoltura alrededor de LoadLibrary () y las llamadas a métodos exportados. Podemos escribir esto por nosotros mismos, pero preferimos usar código existente como lo hemos hecho lo suficiente en nuestro plato.

Una vez más, el rendimiento y el rendimiento son muy, muy importante.

preguntas similares son:

alternativa multiplataforma a COM - éste está cerca, pero queremos en proceso solamente - no hay necesidad de salir del proceso y nuestras necesidades son un poco "peso más ligero"

.

C ++ Cross plataforma dinámica Bibliotecas; Linux y Windows

Esto es para C ++ no administrado - no podemos utilizar .NET

EDITAR - lo que encontramos

Hemos encontrado que Poco funciona muy bien para nuestras necesidades. Como beneficio adicional Esta página es un comentario muy apreciado en el estado de desarrollo C ++ y la dirección de traducción ...

Fue un simple envoltorio multiplataforma que necesitamos que ofrece Poco. Realmente no hay mucho a ella, pero aún así nos ahorra tiempo y pruebas. Sin sobrecarga adicional durante el tiempo de ejecución.

¿Fue útil?

Solución 2

Creo que esto también podría funcionar: http://pocoproject.org/docs/Poco.SharedLibrary.html

Otros consejos

El href="http://www.cse.wustl.edu/~schmidt/ACE.html" rel="nofollow noreferrer"> biblioteca contiene contenedores para dinámica de carga biblioteca que trabajan cruz plataforma. Si quieres más comodidad que LoadLibrary llanura y luego mirar TAO El ORB ACE . El uso de CORBA con TAO es extremadamente performant y lo más probable es mejor que cualquier infraestructura de plug-in de auto elaborado especialmente si se utiliza en llamadas de proceso, como TAO los optimiza.

Para utilizar la dinámica transversal biblioteca plataforma envoltorio uso ACE_DLL. Proporciona la más básica envoltorio multiplataforma alrededor de LoadLibrary () que usted ha mencionado.

Entre usando ACE_DLL y el uso de TAO es el marco de configuración de servicio de ACE que le permite cargar dinámicamente objetos. Después de cargar puede obtener un puntero de conversión hacia arriba al objeto cargado que ha implementado y puede llamar a cualquier método en el objeto cargado.

El código para hacer que se vería así:

char const * const cpc_myClass = ACE_DYNAMIC_SERVICE_DIRECTIVE(
  "myclass",
  "dllname",
  "_make_MyClass",
  ""
);
result = ACE_Service_Config::process_directive(cpc_myClass);
MyClass * p_obj = ACE_Dynamic_Service<MyClass>::instance ("myclass");
p_obj->callAnyMethodYouLike();

Aquí se explicó que TAO conoce dos tipos de optimización de colocación (thru_poa y directos):

  

Cuando se utiliza la estrategia directa, las llamadas a métodos en los objetos de emplazamiento común se convierten en llamadas directas al servidor sin comprobar el estado del POA.

Usted puede ser sorprendido la eficacia de TAO puede ser si se usa correctamente. Sugiero crear una simple prueba de concepto y hacer mediciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top