c++ - 如何创建可从 C 调用的基于 Qt 的库

标签 c++ c linux qt qt-creator

我正在尝试构建一个使用 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/

相关文章:

python - 如何加速 scipy.weave 中的多维数组访问?

linux - Linux 内核中的 copy_from_user 在内部是如何工作的?

linux - 如何将 MacOS CouchDB 数据移动到 Linux?

c++ - 在堆上创建链式匿名对象

c++ - 可用于 C/C++ 的最强密码?

c++ - `*(unsigned int*)((unsigned int)block + n*i)`是什么意思

c - 理解指针和内存地址

c++ - 检查 bool 是否在混合 C/C++ 中定义

c++ - Netbeans v7 C++ 调试器错误

c++ - 字符串末尾的额外零字符出现在 C++ 中用于范围循环