从Python调用具有可变长度数组和数组指针的Fortran dll

时间:2019-07-16 07:53:46

标签: python dll fortran ctypes

我有一个带有以下子例程的fortran dll。

subroutine test_doubles(d) bind(C,NAME='test_doubles')
    !DEC$ ATTRIBUTES DLLEXPORT :: test_doubles
    implicit none
    real(C_DOUBLE), dimension(:) :: d
    d(1)=d(1) + 1d0
end subroutine test_doubles


subroutine test_double_ptr(dptr) bind(C,NAME='test_double_ptr')
    !DEC$ ATTRIBUTES DLLEXPORT :: test_doubles
    implicit none
    real(C_DOUBLE), dimension(:),pointer :: dptr
    real*8, dimension(:),pointer :: data
    allocate(data(5))
    dptr=>data
end subroutine test_double_ptr

,并希望从python调用它们。我尝试使用此代码:

import ctypes
from _ctypes import POINTER
import numpy as np
c_double_p = POINTER(ctypes.c_double)
lib = ctypes.CDLL(filename)
arr = np.ones(5)
lib.test_doubles(arr.ctypes.data_as(c_double_p))
print(arr)

但是它仅在d具有固定尺寸且不知道如何调用test_double_ptr时才有效。

那么有可能从python中调用这些子例程吗?

0 个答案:

没有答案