viernes, 30 de julio de 2010

VisualStudio 2008, RAD Studio 2010 y Vetusta Morla

Esta semana he estado luchando por compilar unas bibliotecas estáticas de código, supuestamente para VC++6, que tras intentarlo con este compilador, con la versión 2005, y la versión 2008, finalmente sólo compila bajo ciertas condiciones de éste último. Sin embargo, el programa donde hay que integrar las funcionalidades que ofrecen estas bibliotecas está desarrollado bajo RAD Studio 2010, con la consiguiente incompatibilidad.
Me he pegado con la utilidad COFF2OMF para convertir estas LIB de VC a RAD 2010 sin éxito. 
Finalmente, he optado por la generación de una DLL wrapper en Visual C, utilizable por RAD 2010 mediante la importación de la biblioteca estática de enlazado con la herramienta IMPLIB de CodeGear.
Al final, tras varios problemas ya conocidos como la incompatibilidad del naming interno de las bibliotecas DLL con la importación para RAD, así como la generación de algunas funciones decorated cuando RAD no lo espera así, dí con la fórmula correcta para exportar DLL en VC2008 e importarlas con RAD 2010.
  1. Ejecutar el asistente de VC2008 para generar un proyecto Win32. Lo llamamos, por ejemplo, TESTDLL. Pulsamos siguiente y seleccionamos biblioteca dinámica y exportar símbolos.
  2. Las funciones que vamos a declarar en nuestra DLL deben estar dentro de una cláusula "extern "C" { };" para que el naming de VC no sea incompatible con el RAD Studio. Yo incluyo al principio:
    #ifdef __cplusplus
    extern "C" {
    #endif

    Y al final de las cabeceras de las funciones de mi DLL:
    #ifdef __cplusplus
    };

    #endif

    De esta forma tenemos en la DLL las funciones con los nombres sin estar decorated
  3. Para integrarlo en nuestro proyecto del RAD Studio, incluimos el .H con las definiciones de las cabeceras, y el .LIB que generamos mediante el siguiente comando:
    IMPLIB -a TESTDLL.LIB TESTDLL.DLL
     
Puede parecer sencillo, pero a mi me ha costado muchas pruebas hasta dar con la combinación de parámetros y comandos adecuados. Espero que os pueda servir.

Todo este trabajo ha estado aderezado con una excelente banda sonora que me han descubierto la semana anterior y quiero recomendar. Debo reconocer que no me gustaban al principio, pero tienen algo que, después de darles una oportunidad, te acaban enganchando. Son Vetusta Morla y os quiero dejar enlaces (usuarios de Spotify) a los que me parecen los mejores temas del disco Un día en el mundo. Que lo disfrutéis.

No hay comentarios: