我有一个API我尝试使用ctypes包装在python(Win7上的2.7.6)代码中。以下是API:
CLIENT_DLLFUNC bool CLIENTAPI search_exportToClipCopy(CLIENTHSEARCH handle, int channel, LPCTSTR fileName, const time_t& from, const time_t& to, const bool* cameras, int length, bool usePassword, LPCTSTR password, bool includeTextIn = false, bool excludePlayer = false);
我遇到的问题是cameras
参数;我也有其他const指针参数的问题。以下是我如何包装此API:
def search_exportToClipCopy(self, hSearch, cSearch, fileName, tFrom, tTo, cameras, length, usePassword, password, includeTextIn=True, excludePlayer=False):
exportToClipCopy = self.sdkdll.search_exportToClipCopy
exportToClipCopy.argtypes = [c_int, c_int, c_wchar_p, c_long, c_long, POINTER(c_bool), c_int, c_bool, c_wchar_p, c_bool, c_bool]
exportToClipCopy.restype = c_bool
exportToClipCopy(hSearch, cSearch, fileName, tFrom, tTo, cameras, length, usePassword, password, includeTextIn, excludePlayer)
除非我遗漏了某些内容,否则我现在应该可以使用上述类型的参数调用此python函数,我将点击API。但事实并非如此:
cam_ptr = pointer(c_bool())
search_exportToClipCopy(hSearch, cSearch, 'dltest.exe', 1399387862, 1399388162, (cam_ptr), 32, False, '', True, False)
结果如下:
exception: access violation reading 0x5368F802
这是我尝试过的一种方式,其中包括一些方法。我使用来自同一客户端的另一个API(虽然是一个不同的dll)做了完全相同的事情,其中参数是一个NON-const bool指针,一切都很好。我做错了什么?