visual studio microsoft how files create crear archivos c++ dll

c++ - studio - microsoft dll



¿Puede C++ exportar clase desde DLL (4)

Ahora es posible exportar solo ciertos símbolos [Classes / API] desde un DLL [en Windows] o un SO [on * nix] utilizando el compilador / stack de GCC. Para obtener una descripción bastante buena de cómo hacer esto, consulte http://gcc.gnu.org/wiki/Visibility .

Me gustaría saber si la exportación de clase (__declspec (dllexport) en VC ++) es un tipo de estándar (ANSI, ISO, ...)
Me gustaría saber si alguien ya ha intentado hacer lo mismo con el compilador intel c ++ y gcc (mingw en windows) y si es posible mezclar dlls generados a partir de diferentes compiladores (realmente dudo que sea posible)

Gracias


La noción de DLL es muy específica de la plataforma. No está cubierto por ningún estándar que sea remotamente universalmente aplicable. De hecho, el acrónimo DLL por lo general se reserva para las bibliotecas dinámicas de Windows. Es innecesario agregar que cualquier cosa específica para el soporte de DLL en C / C ++ depende de la plataforma / proveedor.


Todo lo que comience con __ en C ++ es una extensión específica del proveedor. No sé si otros proveedores de compiladores soportan esto, pero ciertamente no es compatible con el compilador cruzado.


No, __declspec es específico de VC ++.

Una de las razones por las que VC ++ lo necesita es que las DLL no exponen los símbolos fuera de la DLL a menos que se solicite explícitamente. En Posix, los objetos compartidos exponen todos sus símbolos (no estáticos) a menos que se les indique explícitamente que los oculten.

Actualizar

En función de su comentario de que desea que su código sea portátil, quiere usar el preprocesador y hacer algo como esto:

#ifdef WIN32 #ifdef EXPORT_CLASS_FOO #define CLASS_FOO __declspec(dllexport) #else #define CLASS_FOO __declspec(dllimport) #endif #else #define CLASS_FOO #endif class CLASS_FOO foo { ... };

En el proyecto que implementa la clase, asegúrese de agregar EXPORT_CLASS_FOO como definición de preprocesador (que se encuentra en Propiedades de proyecto | NAME ... bajo C / C ++ | Preprocesador | Preprocesamiento de definiciones). De esta manera, los exportará cuando construya el archivo DLL, los importará cuando esté usando el archivo DLL y no hará nada especial bajo Unix.