我收到此错误(适用于 fun(x) 定义中对 f 的调用中的 x):
ctypes.ArgumentError: argument 1: <class 'TypeError'>: Don't know how to convert parameter 1
运行此代码时:
import ctypes as ct
lib = ct.CDLL('x64\\Debug\\main2.dll')
f = getattr(lib,'MAIN2_MOD_mp_MAIN2')
f.restype = None
x = [2.0, 0.0]
def fun(x):
objf = 0.0
f(x,objf)
return objf
非常感谢任何帮助。
更新: main2 是一个 Fortran 子例程:
module main2_mod
contains
!dec$ attributes dllexport :: main2
subroutine main2(x,f)
implicit none
real(8), intent(in ) :: x(*)
real(8), intent(out) :: f
Michael Butscher 在评论中的解决方案:
更换
objf = 0.0
由
objf = ct.c_double(0.0)
和
f(x,objf)
由
f((ct.c_double * len(x))(*x), ct.byref(objf))