草庐IT

python - 为什么 Python 的 ctypes.CDLL 不能从 C 头文件自动生成 restype 和 argtypes 有什么原因吗?

例如,如果能够做到这一点,那就太好了:fromctypesimportCDLLmylib=CDLL('/my/path/mylib.so',header='/some/path/mylib.h')而不是fromctypesimport*mylib=CDLL('/my/path/mylib.so')mylib.f.restype=c_doublemylib.f.argtypes=[c_double,c_double]mylib.g.restype=c_intmylib.g.argtypes=[c_double,c_int]我在python方面的经验表明,要么已经完成了与此非常接近的事情,

python - 如何在 Python 中使用 ctypes 卸载 DLL?

我正在使用ctypes在Python中加载DLL。这很好用。现在我们希望能够在运行时重新加载该DLL。直接的方法似乎是:1.卸载DLL2.加载DLL很遗憾,我不确定卸载DLL的正确方法是什么。_ctypes.FreeLibrary可用,但私有(private)。还有其他方法可以卸载DLL吗? 最佳答案 你应该可以通过处理对象来做到这一点mydll=ctypes.CDLL('...')delmydllmydll=ctypes.CDLL('...')编辑:Hop的评论是正确的,这解除了名称的绑定(bind),但垃圾收集并没有那么快发生,

python - 将字符串列表从 python/ctypes 传递到期望 char 的 C 函数**

我有一个C函数,它需要一个列表\0终止的字符串作为输入:voidexternal_C(intlength,constchar**string_list){//Inspectthecontentofstring_list-butnotmodifyit.}从python(使用ctypes)我想根据python字符串列表调用这个函数:defcall_c(string_list):lib.external_C(??)call_c(["String1","String2","Thelaststring"])关于如何在python端构建数据结构的任何提示?请注意,我保证C函数不会更改string_

Python 和 ctypes : how to correctly pass "pointer-to-pointer" into DLL?

我有一个分配内存并返回它的DLL。DLL中的函数是这样的:voidFoo(unsignedchar**ppMem,int*pSize){*pSize=4;*ppMem=malloc(*pSize);for(inti=0;i另外,我有一个python代码可以从我的DLL访问这个函数:fromctypesimport*Foo=windll.mydll.FooFoo.argtypes=[POINTER(POINTER(c_ubyte)),POINTER(c_int)]mem=POINTER(c_ubyte)()size=c_int(0)Foo(byref(mem),byref(size)]p

python - 使用 distutils 构建 ctypes -"based"C 库

关注thisrecommendation,我编写了一个原生C扩展库来通过ctypes优化Python模块的一部分。我选择了ctypes而不是编写CPython-native库,因为它更快更容易(只有几个函数,里面有所有紧密的循环)。我现在遇到了一个障碍。如果我希望使用distutils轻松安装我的工作,使用pythonsetup.pyinstall,然后distutils需要能够构建我的共享库并安装它(大概是/usr/lib/myproject)。但是,这不是Python扩展模块,据我所知,distutils无法做到这一点。我找到了一些其他有此问题的人的引用资料:Someoneonnu

python - ctypes 加载具有依赖关系的 c 共享库

在Linux上,我有一个依赖于其他库的c共享库。LD_LIBRARY_PATH已正确设置以允许链接器加载所有库。当我这样做时:libgidcwf=ctypes.cdll.LoadLibrary(libidcwf_path)我收到以下错误:Traceback(mostrecentcalllast):File"libwfm_test.py",line12,inlibgidcwf=ctypes.cdll.LoadLibrary(libidcwf_path)File"/usr/lib/python2.5/ctypes/__init__.py",line431,inLoadLibraryretu

python - 使用 ctypes 列出从 dll 导出的函数

有没有办法知道通过python外部函数库ctypes从dll导出了哪些函数?如果可能的话,可以通过ctypes了解导出函数的详细信息。如果是,有人可以提供一段代码吗? 最佳答案 我认为ctypes不提供此功能。在带有VisualStudio的Windows上:DUMPBIN-EXPORTSXXX.DLL或者对于windows上的mingw:objdump-pXXX.dll 关于python-使用ctypes列出从dll导出的函数,我们在StackOverflow上找到一个类似的问题:

python - Python ctypes 中的指针和数组

我有一个包含C函数的DLL,其原型(prototype)如下:intc_read_block(uint32addr,uint32*buf,uint32num);我想使用ctypes从Python调用它。该函数需要一个指向一block内存的指针,它将结果写入其中。我不知道如何构造和传递这么一大块内存。ctypes文档帮助不大。构造一个数组并将其传递给“byref”,如下所示:cresult=(c_ulong*num)()err=self.c_read_block(addr,byref(cresult),num)给出这个错误信息:ArgumentError:argument3::expec

python - 如何使用 ctypes 将 Python 列表转换为 C 数组?

如果我有以下2组代码,如何将它们粘合在一起?voidc_function(void*ptr){inti;for(i=0;i如何使用x中的连续元素列表调用c_function?我试图将x转换为c_void_p,但这没有用。我也尝试使用类似的东西x=c_void_p*10foreiny:x[i]=e但这会出现语法错误。C代码显然需要数组的地址。我怎样才能做到这一点? 最佳答案 以下代码适用于任意列表:importctypespy_values=[1,2,3,4]arr=(ctypes.c_int*len(py_values))(*py_

python - 如何使用 ctypes 打包和解包(结构 <-> str)

这可能是一个愚蠢的问题,但我在文档或任何地方都找不到好的答案。如果我使用struct定义二进制结构,该结构有2种对称的序列化和反序列化方法(打包和解包),但似乎ctypes没有一个简单的方法来做到这一点。这是我的解决方案,感觉不对:fromctypesimport*classExample(Structure):_fields_=[("index",c_int),("counter",c_int),]defPack(ctype_instance):buf=string_at(byref(ctype_instance),sizeof(ctype_instance))returnbufde