Qt 5.14 QLibrary::resolve() возращает NULL при попытке найти функцию в библиотеке
Пишу программу по книге Макса Шлее, я написал программу и библиотеку по листингу но при запуске программа завершает свою работу так как resolve() возвращает NULL из-за того что не находит функцию
Среда MSVC2017 и компилятор тоже от него. Как это можно решить? Я попробовал несколько разных способов из интернета в том числе классический __dllexport но это тоже не работает. Может надо как-то переписать поиск функции в библиотеке?
dynlib.h
#pragma once
//#include "dynlib_global.h"
#include <QString>
//Листинг 42.2, заключаем экспортируемую функцию в спецификатор
//И таким образом она должна стать доступной при подключении либы
extern "C++"
{
QString oddUpper(const QString& str);
}
dynlib.cpp
#include "dynlib.h"
#include <QString>
//Листинг 42.3 реализация функции
//Функция преобразует каждый нечетный символ в заглавную букву
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;
}
main.cpp
//#include "Qt113.h"
#include <QtWidgets/QApplication>
#include <QtWidgets>
//Листинг 42.4
//Проверяем работу функции
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel lbl("this is the example text");
//Создаем объект который будет загружать и
//Предоставлять библиотеку для пользования
QLibrary lib("dynlib");
//Если столкнулись с ошибкой то выходим
if (!lib.load())
{
qDebug() << "Невозможно открыть файл dynlib.dll";
return 0;
}
//Создаем объявление для функции
typedef QString(*Fct)(const QString&);
//Находим и получаем указатель на функци
Fct fct = (Fct)(lib.resolve("oddUpper"));
//Проверяем чтобы указатель был получем
if (fct == NULL)
// ^^^^^^^^^^^^^ Вот здесь прога закрывается
{
qDebug() << "Функция oddUpper не найдена";
return 0;
}
lbl.setText(fct(lbl.text()));
lbl.show();
//Qt113 w;
//w.show();
return a.exec();
}