Как создать библиотеку на основе Qt, которую можно вызывать из C - PullRequest
1 голос
/ 30 декабря 2011

Я пытаюсь создать простую библиотеку, которая использует некоторые функциональные возможности Qt (без цикла обработки событий, просто некоторые манипуляции с изображениями и загрузка файлов), а затем вызываю эту библиотеку из стандартной программы C. Я рассмотрел ответ здесь , но ответ не дал мне достаточной информации для решения проблемы. Я построил библиотеку как статическую библиотеку для связывания и обернул вызовы функций extern "C", но получаю кучу ошибок, начиная с /usr/include/QtCore/qnamespace.h:-1: In function ‘QT_MODULE’:/usr/include/QtCore/qnamespace.h:54: error: unknown type name ‘namespace’.

Есть ли у кого-нибудь краткое руководство по связыванию библиотек Qt из программы C? К вашему сведению, все под Linux (Fedora 15), и программа C и библиотека Qt собираются с QtCreator.

1 Ответ

3 голосов
/ 30 декабря 2011

Допустим, вы хотите создать оболочку для создания и удаления 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 - это, с точки зрения вызывающих, черный ящик.Все манипуляции должны выполняться через вашу библиотеку, передавая этот непрозрачный указатель.

...