Задать вопрос

Программа на Qt крушится при многократном использовании функции из DLL

Создаю чистый проект в Qt Creator. В конструкторе формы подключаю DLL и пытаюсь многократно использовать функцию из DLL:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    QLibrary *library = new QLibrary("UniversalDLL.dll");
 
    typedef int (*testFunc)(int);
    testFunc tst = (testFunc) library->resolve("wrr");
    if (!tst)
    {
        QMessageBox::critical(this, this->windowTitle(), tr("Error loading DLL!"));
        exit(0);
    }
 
    qDebug() << tst(1);
    qDebug() << tst(2);
    qDebug() << tst(3);
    qDebug() << tst(4);
    qDebug() << tst(5);
    qDebug() << tst(6);
    qDebug() << tst(7);
    qDebug() << tst(8);
    qDebug() << tst(9);
    qDebug() << tst(10);
    qDebug() << tst(11);
    qDebug() << tst(12);
    qDebug() << tst(13);
    qDebug() << tst(14);
    qDebug() << tst(15);
}


DLLка лежит в папке с проектом и успешно подключается, в ней одна единственная функция (проект DLL создан в Visual Studio):

extern "C" __declspec(dllexport) int __stdcall wrr(int abonent)
{
return abonent;
}


Крах программы происходит как в release, так и в debug, причем количество использований функции до крушения программы разное в debug и relese:

C:\testettstettd\release\testettstettd.exe завершился с кодом -1073741819

Например, сейчас, в release крушится на 7 итерации использования функции из DLL, а в debug (уже странно?!) перестало крушится.

Однократное использование функции из DLL работет. Что за ерунда, третий день пошел, как пытаюсь разобраться. Пробовал подключать и без использования QLibrary и динамически и статически. Проблема скорее всего не в DLL, т.к. проверял на разных дллках и DLL из проекта на Delphi успешно подключается и работает. Ну и как водится: ПАААМАГИИИТЕЕ!?
  • Вопрос задан
  • 4222 просмотра
Подписаться 4 Оценить Комментировать
Ответ пользователя adminimus К ответам на вопрос (5)
adminimus
@adminimus
как я понял dll и сам проект собираются разными компиляторами? Может тогда в __stdcall дело?
Ответ написан
Комментировать