2010-03-08 28 views
20

¿hay alguna manera en que puedo llamar a código C++ a partir de un código cllamar a código C++ de c

class a 
{ 
    someFunction(); 
}; 

cómo llamar someFunction() de un código c.

de otra manera me pregunto cómo evitar nombre mangling aquí

respecto Vinâyaka Karjigi

Respuesta

12
  1. En primer lugar, escribir una API envoltorio C a su biblioteca basada en objetos. Por ejemplo, si tienes una clase Foo con una barra de métodos(), en C++ lo llamarías como Foo.bar(). Al crear una interfaz C, debe tener una barra de funciones (global) que lleva un puntero a Foo (idealmente en forma de un puntero de vacío para la opacidad).
  2. Envuelva las DECLARACIONES para la API C que ha exportado en el exterior "C".

(no recuerdo todos los operadores de conversión malditos para C++ de mano izquierda y soy demasiado perezoso para mirar hacia arriba, por lo reemplace (Foo *) con un reparto más específica si se quiere en el siguiente código.)

// My header file for the C API. 
extern "C" 
{ 
    void bar(void* fooInstance); 
} 

// My source file for the C API. 
void bar(void* fooInstance) 
{ 
    Foo* inst = (Foo*) fooInstance; 
    inst->bar(); 
} 
+2

¿Por qué utilizar void * en lugar del tipo real? Pasar cualquier tipo aleatorio junto con el estilo c solo parece una receta para el desastre. –

+5

Porque el "tipo real" es una construcción C++ y no tiene (C) equivalente seguro. –