我正在尝试构建一个使用 Qt 的一些功能(没有事件循环,只有一些图像处理和文件加载)的简单库,然后从标准 C
程序调用该库。我已经查看了答案 here ,但答案没有为我提供足够的信息来解决问题。我已将该库构建为要链接的静态库,并使用 extern "C"
包装了函数调用,但我收到了一堆错误,从 /usr/include/QtCore 开始/qnamespace.h:-1: In function 'QT_MODULE':/usr/include/QtCore/qnamespace.h:54: error: unknown type name 'namespace'。
有没有人有关于从 C
程序链接到 Qt 库的简短教程?仅供引用,一切都在 Linux (Fedora 15) 下,C
程序和 Qt 库都是使用 QtCreator
构建的。
最佳答案
假设你想为创建和删除QImage
做一个包装器,它可以像这样完成:
在你的头文件中:
typedef void *my_qimage_t;
extern "C" my_qimage_t my_create_qimage(int width, int height);
extern "C" void my_delete_qimage(my_qimage_t image);
在你的源文件中:
extern "C" my_qimage_t my_create_qimage(int width, int height)
{
QImage *qimage = new Qimage(width, height);
return static_cast<my_qimage_t>(qimage);
}
extern "C" void my_delete_qimage(my_qimage_t image);
{
QImage *qimage = static_cast<QImage *>(image);
delete qimage;
}
从调用者的角度来看,my_qimage_t
类型是一个黑盒子。所有操作都必须通过您的库来完成,方法是传递这个不透明的指针。
关于c++ - 如何创建可从 C 调用的基于 Qt 的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8679923/