在Fortran中调用函数时的值错误

时间:2011-11-09 14:31:31

标签: fortran fortran90

我是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编译器。

非常感谢帮助。

1 个答案:

答案 0 :(得分:-1)

您必须创建一个子例程,传递您要传递给Fortran代码的所有参数以及要从Fortran检索的参数。 请参阅以下示例:

SUBROUTINE EXEC(param_one, param_two, result) BIND(C)
...
END

必须声明所有参数并通过java方法调用传递。