DLL en Builder
¿Porque cuando genero una dll en CBuilder las funciones exportables se anteceden con un '_' dentro del archivo dll? ¿puedo modificar esto?
Lo que pasa es que Builder Genera un underscore (subguión o guión bajo "_") a cada uno de los identificadores globales (funciones, variables o constantes). Para evitar esto debes desactivar la casilla Generate underscores en la oreja Advanced Compiler del diálogo Options en el Menú Project. Si bien esta es una opción bastante buena, no podrás utilizar las librerías (*.lib) por que ellas están enlazadas con esa opción activada.
Una segunta opción puede se antecer a la cláusula __export con __stdcall. Pero para esto hay que tener en cuenta de hacerlo en cada imortación también, para no tener problemas con la pila (stack).
Una tercera opción es guardar la función exportar en un archivo con extenciòn c (*.c). de esta manera esta funciòn no tendrá los manejos de nombres que si tienen los cpp (*.cpp). El problema de esto es que tendrás módulos echos en c y otros en c++, lo que puede resultar algo confuso.
Una cuarta opción (es la que prerimos) es anteceder la declaraciòn de la función con extern "C", esto solo tiene utilidad en archivos cpp (*.cpp). Por ejemplo:
extern "C" void __extern Funcion( void );
Es la soluciòn más elegante.
Una segunta opción puede se antecer a la cláusula __export con __stdcall. Pero para esto hay que tener en cuenta de hacerlo en cada imortación también, para no tener problemas con la pila (stack).
Una tercera opción es guardar la función exportar en un archivo con extenciòn c (*.c). de esta manera esta funciòn no tendrá los manejos de nombres que si tienen los cpp (*.cpp). El problema de esto es que tendrás módulos echos en c y otros en c++, lo que puede resultar algo confuso.
Una cuarta opción (es la que prerimos) es anteceder la declaraciòn de la función con extern "C", esto solo tiene utilidad en archivos cpp (*.cpp). Por ejemplo:
extern "C" void __extern Funcion( void );
Es la soluciòn más elegante.
