调用DLL中的函数并使用数组作为参数

时间:2016-04-19 22:30:56

标签: python c dll

我正在用C编写的DLL调用一个函数。在DLL的文档中,它说该函数的一个参数应该是:

  

32位浮点数组的地址                            用结果填充的数字。

我对C不是很熟悉,有些东西告诉我这是一个C功能。我不太确定我的论点应该用什么。

我正在使用ctypes。

以下是DLL文档中的一个示例:

           float fResult;
           long lRetVal = D2R_GetSingleResult(
                             "E:\\Folder",
                             "E:\\Folder\\Proj1",
                             2001001, &fResult, 1, NULL, NULL );

2 个答案:

答案 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的帮助,你让我走上了正确的道路!