Tengo una biblioteca C++ que proporciona varias clases para administrar datos. Tengo el código fuente de la biblioteca.Uso de la biblioteca C++ en el código C
Quiero extender la API de C++ para admitir llamadas de función C para que la biblioteca se pueda usar con código C y código C++ al mismo tiempo.
Estoy usando la cadena de herramientas GNU (gcc, glibc, etc.), para que el lenguaje y la compatibilidad con la arquitectura no sean un problema.
¿Hay alguna razón por la cual esto es técnicamente no posible?
¿Hay gotcha's que debo tener en cuenta?
¿Existen recursos, código de ejemplo y/o documentación disponible al respecto?
Algunas otras cosas que he descubierto:
- la siguiente manera para envolver su C++ cabeceras que necesitan ser utilizado por el código C.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Mantener "reales" interfaces de C++ en ficheros de cabeceras que no están incluidos por C. Piense PIMPL principle aquí. Usar
#ifndef __cplusplus #error
ayuda aquí a detectar cualquier locura. - Tenga cuidado con los identificadores C++ como nombres en el código C
- Enumeraciones de tamaño variable entre los compiladores C y C++. Probablemente no sea un problema si está utilizando la cadena de herramientas de GNU, pero aún así, tenga cuidado.
Para las estructuras, siga el siguiente formulario para que C no se confunda.
typedef struct X { ... } X
Entonces utilizar punteros para pasar alrededor de los objetos C++, sólo tienen que ser declarada en C como struct X donde X es objeto el C++.
Todo esto es cortesía de un amigo que es un asistente en C++.
Un poco tarde, pero escribió un pequeño howto sobre el envoltorio C de C++: http://www.teddy.ch/c++_library_in_c/ – Teddy