Задать вопрос
AndreyHudz90
@AndreyHudz90
student

Как подключить свою DLL в QT?

Имеется скомпилированная библиотека в которой одна функция:
dynlib.h:
#include <QString>

extern "C++" {
    QString oddUpper(const QString& str);
}


dynlib.cpp:
#include "dynlib.h"

QString oddUpper(const QString& str)
{ 
    QString strTemp;

    for (int i = 0; i < str.length(); ++i) {
        strTemp += (i % 2) ? str.at(i) : str.at(i).toUpper();
    }

    return strTemp;
}


.pro:
TEMPLATE = lib
DESTDIR  = ..
QT       -= gui
SOURCES  = dynlib.cpp
HEADERS  = dynlib.h
TARGET   = dynlib


И есть программа которая должна использовать эту функцию:
app.cpp:
#include <QtWidgets>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QLabel       lbl("this is the example text");
    QLibrary     lib("dynlib");

    typedef QString (*Fct) (const QString&);
    Fct fct = (Fct)(lib.resolve("oddUpper"));
    if (fct) {
        lbl.setText(fct(lbl.text()));
    }
    else{
        lbl.setText("DLL NOT FOUND!");
    }
    lbl.show();

    return app.exec();
}


app.pro:
TEMPLATE = app
QT          += widgets
DESTDIR  = ..
SOURCES	 = main.cpp
TARGET	 = MyApplication


Исполнительный файл программы находится там же где и либа, но сама программа библиотеку не видит.
b6937bcdb1e44e4eaefc2b240378401c.png

Помогите разобраться. Я так понимаю, что нужно еще что то прописать в PRO файле моего приложения...
  • Вопрос задан
  • 1498 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
1. Вместо extern "C++" нужно extern "C" , иначе имя вашей функции замэнглится, и найти её по имени будет весьма непросто.
2. Возьмите Dependency Walker, и проверьте, что ваша функция действительно корректно экспортируется из DLL.
3. Так а в чём конкретно проблема? Какую ошибку вы получаете?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы