Cómo implementar funciones en lenguaje C que llaman a C++ en QT
Implementación del archivo fuente C.
#include "obj.h"
int main(const int argc, const char **argv){
void *temp_obj = getObj(100) ;
printString(temp_obj);//Implementar lenguaje C para llamar a la interfaz QT/C++UI
return (0);
}
Escribir un archivo fuente C++ y un archivo fuente C pueden incluir el mismo archivo de encabezado, como se muestra a continuación.
#include
#ifdef __cplusplus
clase Obj{
público:
Obj(int32_t a=50)
~Obj();
std::string toString();
privado:
int32_t k;
};
#endif
#ifdef __cplusplus
extern "C" {
#endif
void* getObj(int32_t a);
void destroyObj(void *obj);
void printString(void *obj);
#ifdef __cplusplus
}
#endif
Implementación del archivo fuente C++, en el que las funciones del lenguaje C son llamadas por el archivo fuente C.
#include
#include
#include
#include
#include "obj.h"
Obj::Obj(int32_t a){
k = a << 1;
}
Obj::~Obj(){
/* realmente no necesito hacer nada aquí */
/* k = 0 solamente para fines de ejemplo */
k = 0;
}
std::string Obj::toString(){
std ::ostringstream os;
os << "El objeto actualmente es: " << this->k << std::endl;
return os.str(); p>
}
void* getObj(int32_t a){
Obj *out = new Obj(a);
return ((void* )out);
}
void destroyObj(void* obj){
eliminar (((Foo*)obj));
}
void printString(void *obj){
std::string s = ((Obj*)obj)->toString();
std::cout << s;
}
Makefile
implementación del archivo make.
CC ?= gcc
CXX ?= g++
CFLAGS = -O0 -g
CXXFLGS = -00 -g p> p>
OBJ = obj principal
OBJS = $(addsuffix .o,$(OBJ))
todos:
hacer compilar
compilar:
hacer $(OBJS)
hacer objexe
fooexe: $(OBJS)
$ (CXX ) -o fooexe $(OBJS)
main.o: main.c
$(CC) -c -o main.o main.c
obj.o: obj.cpp
$(CXX) -c -o obj.o obj.cpp
limpiar:
rm -rf $ (OBJS ) objexe *.dSYM