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
谢谢,太强了,实在是太强了
作者: 紫雪封尘 时间: 2021-6-2 21:14
谢谢老师,真的学到了
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) |
Powered by Discuz! X3.2 |