1. 程式人生 > >Intel Fortran 調用Delphi編制的DLL

Intel Fortran 調用Delphi編制的DLL

ins oca imp read endif ram cee fortran fail

module link_cont
  interface
    subroutine I_FileOpenCont (ncase,ndata,lpool,xfiles)
      integer(kind=4) :: ncase
      integer(kind=4) :: ndata
      integer(kind=4) :: lpool
      character(len=40), dimension(10) :: xfiles
    endsubroutine I_FileOpenCont
  endinterface
endmodule link_cont

program s
  use link_cont
  use Kernel32
  use , intrinsic :: ISO_C_Binding 
!// 標準模塊 implicit none type(C_FUNPTR) :: C_FileOpenCont !// C 語言指向函數的指針 procedure(I_FileOpenCont) , pointer :: FileOpenCont !// fortran 指向函數的指針 !<------------------------------------------------------------------------------------------------------------------------------- integer(kind=4
) :: add integer(kind=4) :: hwnd integer(kind=4) :: n_case integer(kind=4) :: n_data integer(kind=4) :: lpool character(len=40), dimension(10) :: c_files logical :: fail logical :: syslink
!<------------------------------------------------------------------------------------------------------------------------------- hwnd = LoadLibrary(control.dll//c_null_char) if (hwnd <= 0) then fail = .true. syslink = .false. write(*,*) DLL Loading failure because control.dll was not found read(*,*) else write(*,*) Succeed Contempt DLL (control.dll) Loading add = GetProcAddress(hWnd,FILEOPENCONT//c_null_char) !//獲得地址(整數) C_FileOpenCont = transfer( add , C_FileOpenCont ) !//把整數的地址轉換成 C 指針 call C_F_PROCPOINTER( C_FileOpenCont , FileOpenCont ) !//把C指針轉換成 fortran 指針 call FileOpenCont(n_case,n_data,lpool,c_files) endif end program s

在delphi和intel fortran下實證過。

Intel Fortran 調用Delphi編制的DLL