Red de conocimiento informático - Material del sitio web - Cómo implementar funciones en lenguaje C que llaman a C++ en QT

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();

}

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>

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