我试图使用Python的ctypes来处理DLL,但是当我试图调用作为指向另一个函数的指针传递的函数时,偶尔会遇到问题。在
一点背景知识…我正在尝试使用Dokan(版本0.6.0)构建一个用户空间文件系统。有点松散地说,Dokan基本上是Windows的FUSE。我已经用ctypes包装了dokan头文件(类似于pydokan)。该头文件包含函数指针的定义,如下所示typedef int (WINAPI *PFillFindData) (PWIN32_FIND_DATAW, PDOKAN_FILE_INFO);
它还包含另一个函数的原型
^{pr2}$
相应的ctypes定义如下所示PFillFindData = ctypes.WINFUNCTYPE(ctypes.c_int,
PWIN32_FIND_DATAW,
PDOKAN_FILE_INFO)
FindFilesWithPattern = ctypes.WINFUNCTYPE(ctypes.c_int,
ctypes.c_wchar_p,
ctypes.c_wchar_p,
PFillFindData,
PDOKAN_FILE_INFO)
后一个函数(findFileWithPattern)的实现必须调用传递给它的FillFindData函数。基本实现如下所示def FindFilesWithPattern(self,
FileName,
SearchPattern,
FillFindData,
DokanFileInfo):
if FileName == '\\':
File = WIN32_FIND_DATAW(FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_READONLY,<
本文链接:https://my.lmcjl.com/post/1213.html
4 评论