紫雪封尘 发表于 2021-6-2 17:15:01

QTcreator 调用vs2012编写的Fortran的DLL时无法加载的问题

本帖最后由 紫雪封尘 于 2021-6-2 17:17 编辑

最近,利用QT调用Fortran 编写的DLL出现无法加载的问题,QT调用DLL代码如下:
QString filename,file_information;
   typedef void(*QTread_segy)(char* filename,char*file_information,int *nt,int* ntrace,int *dt,int *sgyformat,int,int);QLibrary dll("Dllreadtest.dll");//加载DllREAD_NTRACE.dll;             qDebug()<<222222;            filename=ui->LEsegy->text();//从文本行读取segy文件名             file_information=ui->lineEdit_trace->text();//从文本行读取存储segy信息的文件名 if(dll.load())//当我的Fortran 程序里有open文件的函数,则在此处无法加载{            qDebug()<<111111;      QTread_segy read_segy=(QTread_segy)dll.resolve("READ_SEGY");         int nt;          int dt;          int ntrace;         int sgyformat;   QByteArray ba = filename.toLocal8Bit();      QByteArray f_information = file_information.toLocal8Bit(); char*c=ba.data();   read_segy(c,f_information.data(),&nt,&ntrace,&dt,&sgyformat,ba.size(),f_information.size());//调用DLL //把读到的信息输出到对应的文本行       ui->lineEdit_segformat->setText(QString::number(sgyformat));      ui->lineEdit_nt->setText(QString::number(nt));          ui->lineEdit_ntrace->setText(QString::number(ntrace));       ui->lineEdit_dt->setText(QString::number(dt));}

我的Fortran 程序如下
subroutine READ_SEGY(filename,file_information,nt,ntrace,dt,sgyformat,filenamesize,file_information_size)

    implicit none
    !DEC$ATTRIBUTES DLLEXPORT::READ_SEGY
    integer,value::filenamesize,file_information_size!传递文件名大小
    character(len=filenamesize)::filename!输入文件名
    character(len=file_information_size)::file_information!sgy参数文件大小
    integer:: ios,mark_pos=1
    character(len=128):: iom='OK'
    integer*8::length
    Integer(kind=4)::tmp!中间变量
    integer*4::nt
    integer*4::dt
    integer*4ntrace !ntrace是地震道数,nt是采样点数,dt是采样间隔
    integer(kind=4)::sgyformat!用于判别sgy文件类型| SgyFormat:0--IBM,1--IEEE,2--无卷头PC
    integer(kind=2),dimension(1800):: REEL !3600字节
    integer(kind=2),dimension(120):: HEAD!240字节   
    NT=11;
    DT=10;
    NTRACE=12;
    sgyformat=1;open(unit=11,file="file.txt")
    write(11,*)"采样点数","=",nt
    write(11,*) "地震道数","=",ntrace
    write(11,*)"采样间隔","=",dt
    write(11,*)'segy类型编号,0--工作站,1--微机,2--无卷头P微机 ,编号为:',sgyFormat
    close(11)
   end subroutine READ_SEGY
!!!!!!因为有此处操作导致load无法成功,我想知道为什么?请大佬们指教

vvt 发表于 2021-6-2 21:06:32

可能是这个原因:
http://dlllose.w.fcode.cn/

紫雪封尘 发表于 2021-6-2 21:13:34

vvt 发表于 2021-6-2 21:06
可能是这个原因:
http://dlllose.w.fcode.cn/

谢谢,太强了,实在是太强了

紫雪封尘 发表于 2021-6-2 21:14:10

vvt 发表于 2021-6-2 21:06
可能是这个原因:
http://dlllose.w.fcode.cn/

谢谢老师,真的学到了
页: [1]
查看完整版本: QTcreator 调用vs2012编写的Fortran的DLL时无法加载的问题