本帖最后由 晒sunstar 于 2016-12-9 21:58 编辑
C++向Fortran中传递字符串,已经成功,但是出了些问题。“直接运行”能够成功,“调试状态”就会出错。详述如下:
一、代码:
(1)C++代码:
[C++] 纯文本查看 复制代码 #include "stdafx.h"
#include <stdio.h>
#include <string.h>
extern "C" {void _stdcall main(char *,int); }
int _tmain(int argc, _TCHAR* argv[])
{
char *inputfile= "Passing...Good Luck!";
main(inputfile,strlen(inputfile));
return 0;
}
(2)Fortran代码:
[Fortran] 纯文本查看 复制代码 subroutine main( pfilename , lens )
!DEC$ ATTRIBUTES stdcall,ALIAS:"_main@8",DLLEXPORT::main
use ,Intrinsic::ISO_C_Binding
implicit none
type(C_PTR) , value :: pfilename
integer,value::lens
character(len=lens),pointer::filename_a
character(len=512)::filename_b
character(len=512)::path_one,path_two
call c_f_pointer( pfilename , filename_a )
filename_b=filename_a
write(*,*)"传进来的字符串是:",trim(filename_b)
path_one="Hello World!"
write(*,*)"Path_one是:",trim(path_one)
path_two=path_one
write(*,*)"Path_two是:",trim(path_two)
end subroutine
二、问题描述
(1)直接运行:
如图a,程序能够运行。
(2)调试模式:
1)如图b,在c++的这一句会第一次进入“strlen.asm”,按“继续”能继续(如图c);
2)进入Fortran的DLL后,前几句能正常执行,但到“path_two=path_one”一句时进入memcpy.asm,如图d和e。
3)一直按F11,会进入“无可用源”,如图f。
4)再一直按F11,进入反汇编;再按“继续”就退出了。如图g和h。
|