Estoy en el proceso de portar una gran aplicación de C++ desde Linux (gcc) a Windows (Visual C++ 2008) y tengo problemas con los conectores de los complementos. En Linux, esto no fue un problema, ya que .so admite la búsqueda de símbolos en tiempo de ejecución, pero el dll no parece ser compatible.Visual C++ - DLL de complemento de enlace contra EXE?
Algunos antecedentes: La aplicación (el anfitrión), que alberga un entorno de programación, proporciona interfaces para plugins (bibliotecas compartidas que se cargan en tiempo de ejecución mediante llamadas a la API guión), permitiendo que el anfitrión y la API de secuencias de comandos para extenderse sin recompilar la aplicación de host. En Linux, esto es solo cuestión de incluir los encabezados de la aplicación host en el origen del complemento, pero en Windows recibo errores del enlazador. No estoy seguro de exactamente con qué necesito vincularme para que Visual C++ resuelva estos símbolos.
Una de nuestras dependencias (código abierto, LGPL) tiene declaraciones de preprocesador que utiliza para insertar __declspec (dllexport) y __declspec (dllimport) en sus encabezados. Algunas investigaciones previas indican que quizás tenga que hacer esto también, pero me gustaría estar seguro antes de modificar un montón de encabezados centrales. (Anteriormente pude hacer esto trabajando en MinGW, pero hemos decidido que el soporte de Visual Studio es un requisito para este tipo de proyecto comercial.)
Mi pregunta, en pocas palabras: ¿Cómo se vincula el tiempo de ejecución- dlls cargados contra un exe de host en Visual C++?
Editar: Para aclarar el problema con un ejemplo, tengo una clase en mi aplicación host, Objeto, que representa el tipo de base de un objeto que se pueda acceder por un guión. En mis complementos, tengo varias clases que extienden Objeto para realizar otras funciones, como la integración del soporte de red o nuevos elementos visuales. Esto significa que mi dll debe vincularse con símbolos en el host exe, y no estoy seguro de cómo hacerlo.
Estoy teniendo un poco de problemas para resolver esto. Si tiene un ejemplo concreto y lo simplifica con unas pocas líneas de código, tal vez eso ayude a todos a ayudarlo. – ojblass