как позвонить в Фортран - PullRequest
0 голосов
/ 03 июня 2018

У меня есть один файл DLL, который содержит функцию «ProcessWeather», и я хочу вызвать эту функцию в коде Fortran, как показано ниже:

PROGRAM myprog
!DEC$ ATTRIBUTES DLLIMPORT :: EPLUSWTH


INTERFACE

  SUBROUTINE ProcessWeather(InType,OutType,InFileName,OutFileName,ErrFlag)

    CHARACTER(len=*), INTENT(IN) :: InType       ! InputFile Type
    CHARACTER(len=*), INTENT(IN) :: OutType      ! OutputFile Type
    CHARACTER(len=*), INTENT(IN) :: InFileName   ! InputFile Name (Full path)
    CHARACTER(len=*), INTENT(IN) :: OutFileName  ! OutputFileName (Full path)
    REAL(4), INTENT(OUT)  :: ErrFlag      ! If errors are found,
                                                 ! set to true and put
                                                 ! description put in file.
 END SUBROUTINE
END INTERFACE
END PROGRAM

Файл DLL помещается в то же место, где яположить файл фортрана в.Когда я компилировал код на фортране, я получил следующую ошибку: неопределенная ссылка на processweather_

Любое предложение будет высоко оценено.

1 Ответ

0 голосов
/ 03 июня 2018

Если вы компилируете с gfortran (как вам кажется, ваш комментарий), директивы !$DEC будут игнорироваться.Но вы можете использовать директивы GCC , а именно директиву ATTRIBUTES, и объявить в ней атрибут DLLIMPORT.

Вы также можете просто использовать стандарт bind(C, name="the_name").Также, насколько я помню, GCC не требовал каких-либо атрибутов, чтобы сделать символы внешне видимыми при создании DLL.

...