关于QT程序调用Fortran生成的Dll的问题,求解答!!

发布于 2022-09-07 21:45:16 字数 1434 浏览 20 评论 0

题目描述

QT+VS2017 无法调用Fortran生成的DLL

题目来源及自己的思路

自己学习中遇到的问题,当时以为是路径的问题,但是我用绝对路径也不行,把dll文件拷到exe目录也不行。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
1、用LoadLibrary()

#include "Test00.h"
#include<Windows.h>
#include<qmessagebox.h>
typedef int(*FUNCTIONABZERO)(int input);

Test00::Test00(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    loadDll = LoadLibrary(TEXT("C:\VisualStudioWorkspace\QtStudy\Test00\Test00\TestDll.dll"));
    if (loadDll == NULL)
    {
        QMessageBox::warning(this, QStringLiteral("警告!"), QStringLiteral("载入库文件失败!"), QMessageBox::Yes);
    }
}

void Test00::on_startBtn_clicked()
{
    FUNCTIONABZERO ABZERO = (FUNCTIONABZERO)GetProcAddress(loadDll,"ABZERO");
    if (ABZERO==NULL)
    {
        QMessageBox::warning(this, QStringLiteral("警告!"), QStringLiteral("函数不存在!"), QMessageBox::Yes);
    }
    else
    {
        int a = ui.arg1->text().trimmed().toInt();
        int result = ABZERO(a);
        ui.result->setText(QString::number(result));
    }
}

2、换用QLibrary

QLibrary myDLL("C:\VisualStudioWorkspace\QtStudy\Test00\Test00\TestDll.dll");
    if (myDLL.load())
    {
        QMessageBox::information(this,"OK","DLL is loaded! ");
    }
    else
    {
        QMessageBox::warning(this,"Warning","DLL load failure!");
    }

你期待的结果是什么?实际看到的错误信息又是什么?

希望大佬解惑!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

掌心的温暖 2022-09-14 21:45:16

已解决!!Fortran生成dll时没配置,默认生成32位的dll了。而我的QT程序是64位的,我又重新把dll生成64位的没问题了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文