Escribí una biblioteca de clases en C++ y la compilé con éxito en Linux con g ++ como objeto compartido, y luego creé algunas aplicaciones que la usaban. Ahora tengo que portarlo a VS2008. Di todas las clases los prefijos requeridos __declspec (dllexport), luego traté de compilarlo. Consigo un montón de advertencias, que básicamente tienen que ver con:problemas con portar una biblioteca de clases DLL C++ a Visual Studio
- mis clases de excepción personalizada, derivados de std :: runtime_error, que rendimiento: "advertencia C4275: clase no DLL-interfaz 'std :: runtime_error 'utilizado como base para la clase de interfaz dll' cci :: FileOperationException '". ¿Cómo se supone que voy a hacer una clase de biblioteca estándar dll-exportable?
- especificaciones de excepción en las declaraciones de las funciones miembro, que causan "advertencia C4290: especificación de excepción C++ ignorada excepto para indicar que una función no es __declspec (nothrow)". Leí en alguna parte que VS no los admite y que lo hace en otro lado. Qué muy confuso.
que leer a la gente diciendo que la exportación de clases en un archivo DLL es generalmente una mala idea, de que hay una gran cantidad de cosas que pueden salir mal, y ahora tengo la cabeza llena de conceptos como la incompatibilidad binaria, el infierno DLL, compilador la versión no coincide, etc., y para ser sincero, realmente no puedo entenderlo. Entonces, ¿cuál es la forma correcta, segura y fácil de crear una biblioteca de clases compartida en Windows?
Gracias.
¿Realmente necesita ser una DLL? Hacer una biblioteca estática evitará muchos problemas. –
Buen punto. :) La pregunta original sigue en pie, sin embargo, la gente puede usar DLL de alguna manera, ¿no es así? (Además, ¿hay alguna manera fácil de cambiar la compilación de compartida a estática? ¿Será suficiente con Project-> Properties-> General-> Configuration Type-> Static Library?) – neuviemeporte
Los están usando, pero no sin un montón de saltos de aro. En mi humilde opinión, una biblioteca estática siempre debe ser la primera opción. –