Pregunta

Necesito construir una biblioteca C ++ para distribuir entre nuestros clientes. Se debe poder acceder a la biblioteca desde una amplia gama de idiomas, incluidos VB6, C ++, VB.net y C #.

He estado usando controles ActiveX (archivos ocx) hasta ahora. Pero me pregunto si hay un mejor tipo de biblioteca (dll, etc.) que pueda construir. ¿Qué me recomiendan?

Estoy limitado a C ++ como el lenguaje de la biblioteca, pero puede mencionar otros lenguajes para referencia a otros desarrolladores.

P.S. Lo siento si la pregunta ya se hizo. Tuve algunos problemas para encontrar un título adecuado. Siéntase libre de corregir mi inglés.

Editar: Parece que la mejor opción es DLL o OCX (es decir, COM), pero todavía tengo algunas dudas sobre cuál elegiré. ¿Cuál es más adecuado para los lenguajes modernos (.NET, por ejemplo)? ¿Cuál sería más fácil de usar desde la perspectiva del desarrollador final?

¿Fue útil?

Solución

Casi todos los lenguajes tienen una forma de cargar bibliotecas dinámicas y acceder a las funciones C exportadas desde ellos.

No hay nada que le impida usar C ++ dentro de la dll, pero para una portabilidad máxima, exporte solo las funciones de C. Tengo más información sobre esto en esta publicación .

Otros consejos

Si está buscando admitir tanto VB6 como .NET, está bastante atrapado con la exposición de interfaces a través de COM, pero al menos eso le evitará tener que crear más de un contenedor basado en el idioma / sistema de tiempo de ejecución con el que intentas interactuar.

Si hay alguna posibilidad de que esto deba ser portado a plataformas que no sean de Windows, entonces una biblioteca DLL / Compartida es su mejor opción ya que un objeto COM realmente no es portátil.

Además, puede llamar a una DLL desde casi cualquier plataforma, incluso si requiere que escriba un contenedor de algún tipo. Es bastante fácil envolver un dll en un objeto com, pero si crea un objeto com nativo es mucho más difícil agregar una API DLL de estilo C. Además, es posible que desee llamarlo desde Java, por ejemplo, y es mucho más fácil escribir un contenedor JNI para llamar a su DLL que hacerlo funcionar con COM en cualquier tipo de plataforma cruzada.

Realmente depende de qué plataformas realmente necesites llamar y cuán seguro estés de que no obtendrás algo fuera de lo común en el futuro.

Para que pueda llamarse desde todos esos idiomas, su única opción real será COM, sin tener que escribir envoltorios donde sea necesario (lo que anularía el punto)

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