Создаю чистый проект в 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 успешно подключается и работает. Ну и как водится: ПАААМАГИИИТЕЕ!?