从C调用Fortran;返回时的字符串已损坏

从C调用Fortran;返回时的字符串已损坏,第1张

概述我从C调用Fortran 77函数传递文件句柄,字符串和长度.文件成功打开,Fortran子例程退出.但是,回到C代码中,传递给fortran的字符串已损坏.当达到函数openFile的底部时,程序崩溃. 崩溃只出现在发布中,但不出现在调试中.绘制字符串,我看到在发布时变量fileNameToFortran充满了垃圾. 谢谢你的帮助 我在发行版中使用ifort和以下编译器标志(Windows 7机 我从C调用Fortran 77函数传递文件句柄,字符串和长度.文件成功打开,Fortran子例程退出.但是,回到C代码中,传递给fortran的字符串已损坏.当达到函数openfile的底部时,程序崩溃.

崩溃只出现在发布中,但不出现在调试中.绘制字符串,我看到在发布时变量filenameToFortran充满了垃圾.

谢谢你的帮助

我在发行版中使用ifort和以下编译器标志(Windows 7机器(32位)):
/ names:lowercase / f77rtl / traceback / iface:cref / threads / recursive / LD

并在调试中:
/ names:lowercase / f77rtl / traceback / iface:cref / threads / recursive / LDd / Zi / deBUG:full / check:all / traceback

这是C代码:

typedef voID  (FORTCALL *sn_openfile_func) (int *,char[],int *,int);voID openfile(const int fileHandle,const std::string filename){  int fileHandletoFortran = fileHandle;   char filenameToFortran[20];   assert(filename.size() < 20);  strcpy(filenameToFortran,filename.c_str());   int lstr = strlen(filenameToFortran);  openfile_func_handle(&fileHandletoFortran,filenameToFortran,&lstr,lstr);}

这是Fortran代码:

SUbroUTINE SN_OPENfile(fileNR,filename,FSIZE)      !DEC$ATTRIBUTES DLLEXPORT :: SN_OPENfile      IMPliCIT NONE      INTEGER fileNR,FSIZE      CHaraCTER filename*FSIZE      OPEN (fileNR,file = filename,&       ACCESS = 'SEQUENTIAL',STATUS = 'REPLACE',ERR=222)      GOTO 333222   WRITE(*,*) 'Error @R_419_4639@ file'333   END
解决方法 好的,我自己找到了答案.

宏FORTCALL定义为__STDCALL现在,当使用iface:cref时它只会在发布时崩溃.这很奇怪,但在我删除之后,它适用于发布和调试.

总结

以上是内存溢出为你收集整理的从C调用Fortran;返回时的字符串已损坏全部内容,希望文章能够帮你解决从C调用Fortran;返回时的字符串已损坏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存