从Fortran将数组作为Lua函数参数传递

我正在寻找Fortran示例(也包括接口函数),以将数组作为参数传递给Lua函数。我能够使用fortlua项目开始。但是提供的示例逐个传递一个元素。感激任何帮助。

--Lua代码

local q1
local q2
function getoutput(qout1, qout2)
--qout1和qout2是具有某些维度的数组
  q1 = qout1
  q2 = qout2
end

-- 在fortran中我使用

config_function('getoutput', args, 2, cstatus)

但是设置args是我正在寻求一些帮助的地方。下面的代码可以针对标量参数变量而不是数组进行操作。

!> 在配置文件中评估函数并获取其结果。
FUNCTION config_function(name, args, nargs, status)
    REAL :: config_function
    CHARACTER(LEN=*) :: name
    REAL, DIMENSION(nargs) :: args
    REAL(KIND=c_double) :: anarg
    INTEGER :: nargs
    INTEGER :: status
    INTEGER :: iargs
    INTEGER(c_int) :: stackstart

    stackstart = lua_gettop(mluastate)

    config_function = 0
    status=0

    CALL lua_getglobal(mluastate, TRIM(name)//C_NULL_CHAR)
    IF (lua_type(mluastate,-1) .eq. LUA_TFUNCTION ) THEN
        DO iargs = 1,nargs
          anarg = args(iargs)
          CALL lua_pushnumber(mluastate, anarg)
        ENDDO
        IF (lua_pcall(mluastate, nargs, 1, 0) .eq. 0) THEN
          if (lua_isnumber(mluastate, -1) .ne. 0) THEN
            config_function = lua_tonumber(mluastate, -1)
            CALL lua_settop(mluastate, -2)
          ELSE
            !这里无需弹出任何内容
            status=-3
          ENDIF
        ELSE
          CALL lua_settop(mluastate, -2)
          status=-2
        ENDIF
    ELSE
        CALL lua_settop(mluastate, -2)
        status=-1
    ENDIF
    IF (stackstart .ne. lua_gettop(mluastate)) THEN
       WRITE(*,*)'从config_function出来时,堆栈的大小不同'
    ENDIF
END FUNCTION config_function
点赞