建议你用标准的混编方法:ISO_C_Binding
不但在 VS+IVF 可以用,在其他编译器(gcc,gfortran)也可以用。
它是语法规范的标准用法。
[C++] 纯文本查看 复制代码 extern "C" {
void GETSTRING(char *A,
int LEN);
}
void main()
{
char STR[] = "hello";
GETSTRING(STR, strlen(STR));
return;
}
[Fortran] 纯文本查看 复制代码 subroutine getstring(a,n) Bind( C , Name = "GETSTRING" )
!DEC$ ATTRIBUTES DLLEXPORT ::GETSTRING
use ,Intrinsic::ISO_C_Binding
implicit none
type(C_PTR) , value :: a !c++主程序中传递进来的“a”变量,是C语言的指针
integer , value :: n !传入的字符串长度
character(len=n),pointer::pa !这是Fortran的字符串指针
call c_f_pointer( a , pa ) !把c语言的指针转换成fortran字符串指针
write(*,*) pa
end subroutine
|