Java与 Fortran混编的问题,在用java的JNA调用Fortran生成的dll时,需要将String类型的文件地址,传入dll。但是dll中的字符串需要用Character,所以 ,这个数据类型怎么转换,这个类怎么写
Fortran代码如下:
subroutine DIRECTORY123(c1,c2,n1,n2);
!MS$ATTRIBUTES DLLEXPORT::DIRECTORY123
!MS$ATTRIBUTES STDCALL,ALIAS:'DIRECTORY123'::DIRECTORY123
!MS$ATTRIBUTES REFERENCE::c1,c2
implicit none;
integer::n1,n2;
character(n1)::c1;
character(n2)::c2;
write(,)n1;write(,)c1(1:n1);
write(,)n2;write(,)c2(1:n2);
end subroutine DIRECTORY123;
(c1,c2是需要传入的字符串,n1.n2分别为两个字符串的长度)
1、用字符数组接收, 然后你可以手动转为字符串,这个是最简单的。
character(512)::str
character::c1(n1)
str=''
do i = 1, n1
str(i:i) = c1(i)
end do
2、复杂的,也可以用指针
subroutine Sub(filename,n)
USE, INTRINSIC :: ISO_C_BINDING
implicit none
integer n
character:: filename(n)
character(n),pointer::p
call c_f_pointer(c_loc(filename),p)
print*,p(1:n)
end subroutine