我正在用C编写的DLL调用一个函数。在DLL的文档中,它说该函数的一个参数应该是:
32位浮点数组的地址 用结果填充的数字。
我对C不是很熟悉,有些东西告诉我这是一个C功能。我不太确定我的论点应该用什么。
我正在使用ctypes。
以下是DLL文档中的一个示例:
float fResult; long lRetVal = D2R_GetSingleResult( "E:\\Folder", "E:\\Folder\\Proj1", 2001001, &fResult, 1, NULL, NULL );
答案 0 :(得分:1)
另一种方法是声明函数类型以帮助ctypes
推导出一切:
D2R = ctypes.cdll.LoadLibrary("d2r.so")
D2R_GetSingleResult = D2R.D2R_GetSingleResult
D2R_GetSingleResult.argtypes = (ctypes.c_char_p, ctypes.c_char_p, ctypes.c_int, ctypes.POINTER(ctypes.c_float), ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p)
D2R_GetSingleResult.restype = ctypes.c_int
...
fResult = ctypes.c_float()
lRetVal = D2R_GetSingleResult("Folder", "Folder\\Proj1", 2001001, fResult, 1, None, None)
答案 1 :(得分:0)
我需要将数组参数定义如下:
(ctypes.c_float*1)()
感谢@fukanchik的帮助,你让我走上了正确的道路!