我需要调用一些fortran代码,该代码可以动态分配与该基本示例相似的数组。 (与代码中的这个示例不同,我在函数的开头并不清楚数组的大小)
subroutine getIdentity(n,I)
integer, intent(in) :: n
integer, allocatable,dimension(:,:), intent(out) :: I
integer :: j,k
write(*,*) "creating " ,n, "x", n, "identity matrix"
allocate(I(n,n))
do j=1,n
do k=1,n
if(k==j) then
I(j,k) = 1
else
I(j,k) = 0
end if
end do
end do
end subroutine getIdentity
当我用此朱莉娅代码调用此代码时:
I = zeros(Int32,1,1)
n = Ref{Int32}(3)
ccall((:__myModule_MOD_getidentity,"./test.so"), Cvoid ,
(Ref{Int32},Ref{Int32}), n,I)
println(I)
当我看着朱莉娅时,那只是垃圾,不是我期望的身份矩阵。正确的方法是什么?