Fortran Coder

标题: QTcreator 调用vs2012编写的Fortran的DLL时无法加载的问题 [打印本页]

作者: 紫雪封尘    时间: 2021-6-2 17:15
标题: 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*4  ntrace !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
可能是这个原因:
http://dlllose.w.fcode.cn/
作者: 紫雪封尘    时间: 2021-6-2 21:13
vvt 发表于 2021-6-2 21:06
可能是这个原因:
http://dlllose.w.fcode.cn/

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

作者: 紫雪封尘    时间: 2021-6-2 21:14
vvt 发表于 2021-6-2 21:06
可能是这个原因:
http://dlllose.w.fcode.cn/

谢谢老师,真的学到了




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2