libvhcall-fortran  2.5
sample.f
2  INTEGER(8) :: handle
3  INTEGER(8) :: sym
4  INTEGER(8) :: ca
5  INTEGER(8) :: retval
6  INTEGER :: ir
7  REAL :: val(5) = (/ 1.0,2.0,3.0,4.0,5.0 /)
8  handle = fvhcall_install('./libvhcall.so')
9  ! Case of subroutine
10  sym = fvhcall_find(handle,'VH_SBR')
11  ca = fvhcall_args_alloc()
12  ir = fvhcall_args_set(ca, fvhcall_intent_inout, 1, val)
13  ir = fvhcall_args_set(ca, fvhcall_intent_in, 2, SIZE(val))
14  WRITE(*,*)"VH subroutine INPUT > ",val
15  ir = fvhcall_invoke_with_args(sym, ca)
16  IF (ir==1) THEN
17  WRITE(*,*)"Fail to invoke subroutine"
18  stop(1)
19  ENDIF
20  WRITE(*,*)"VH subroutine OUTPUT> ",val
21  ! Case of function
22  sym = fvhcall_find(handle,'VH_MOD::VH_FUNC')
23  CALL fvhcall_args_clear(ca)
24  ir = fvhcall_invoke_with_args(sym, ca, retval)
25  IF (ir==1) THEN
26  WRITE(*,*)"Fail to invoke function"
27  stop(1)
28  ENDIF
29  WRITE(*,*)"VH function return ",retval
30  CALL fvhcall_args_free(ca)
31  ir = fvhcall_uninstall(handle)
32  stop
33  END