Неправильные значения при вызове функции в Фортране - PullRequest
1 голос
/ 09 ноября 2011

Я новичок в Фортране, и для этого мне нужно создать интерфейс между C # и Фортраном. Передача аргумента из 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 голосов
/ 06 февраля 2017

Вы должны создать подпрограмму, передающую все параметры, которые вы хотите передать в код Fortran, и параметры, которые вы также хотите получить из Fortran. Смотрите пример ниже:

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

все параметры должны быть объявлены и переданы через вызов метода Java.

...