我是Fortran的新手,必须在C#和Fortran之间建立一个接口。 从C#到Fortran的参数传递没有问题,但更简单的任务,在Fortran代码中传递值不想工作......
当我想将参数从一个Fortran函数传递给另一个函数时,在这种情况下从VdiFunctionRunner传递到TGA_810,被调用的函数没有正确的参数值。
这是我的代码的简化版本:
module VdiFunctionRunnerMain
implicit none
contains
integer function VdiFunctionRunner ()
!DEC$ ATTRIBUTES DLLEXPORT, StdCall :: VdiFunctionRunner
implicit none
CHARACTER (256) :: inXTGA, copyXTGA
CHARACTER (256) :: ARRAY_810(10)
copyXTGA = 'test'
nrReturnValues = tga_810(copyXTGA, 1)
VdiFunctionRunner = nrReturnValues
return
end function VdiFunctionRunner
integer function tga_810(xtga, testNr)
character (256), intent(in) :: xtga
integer, intent(in) :: testNr
tga_810=2
end function tga_810
end module VdiFunctionRunnerMain
如您所见,传递的值应该是'test'和1,但在调试器中我只得到数组的第一个字符('t')和testNr = 0。 我猜编写代码没有错误,不是吗? 当代码正确时,是否有人知道这可能是编译器问题还是类似的东西?
我正在使用Intel 11编译器。
非常感谢帮助。
答案 0 :(得分:-1)
您必须创建一个子例程,传递您要传递给Fortran代码的所有参数以及要从Fortran检索的参数。 请参阅以下示例:
SUBROUTINE EXEC(param_one, param_two, result) BIND(C)
...
END
必须声明所有参数并通过java方法调用传递。