36得票6回答
在Python中调用C函数

我有一堆用C语言编写的函数,我希望我用Python语言编写的代码能够访问这些函数。 我在这里看到了几个与此类似的问题(例如这里和这里),但是我对需要采取哪种方法感到困惑。 一个问题建议使用ctypes,另一个问题建议使用cython。我已经阅读了两者的文档,但我完全不清楚哪个更适合我。 ...

31得票6回答
使用numpy/ctypes暴露C分配的内存缓冲区的更安全方法?

我正在为一个使用共享内存缓冲区存储其内部状态的C库编写Python绑定。这些缓冲区的分配和释放是由库本身在Python之外完成的,但是我可以通过从Python中调用包装的构造函数/析构函数来间接控制这个过程。我想将其中一些缓冲区暴露给Python,以便我可以从中读取,并在某些情况下向其中推送值...

31得票3回答
使用distutils构建基于ctypes的C库

按照这个建议,我已经编写了一个本地的C扩展库,通过ctypes优化Python模块的一部分。 我选择使用ctypes而不是编写一个CPython本地库,因为它更快、更容易(只需几个带有所有紧密循环的函数)。 现在我遇到了一个问题。如果我想让我的工作可以轻松安装使用distutils使用pyt...

31得票4回答
Python ctypes:从相对路径加载DLL

我有一个Python模块wrapper.py,它包装了一个C DLL。该DLL与模块在同一个文件夹中。因此,我使用以下代码来加载它:myDll = ctypes.CDLL("MyCDLL.dll") 如果我在自己的文件夹中执行wrapper.py,它可以正常工作。 但是,如果我从其他地方运行它...

30得票2回答
清晰的 ctypes 类结构方式

我定义了一个ctypes类和一个相关的便捷函数,代码如下:class BNG_FFITuple(Structure): _fields_ = [("a", c_uint32), ("b", c_uint32)] class BNG_FFIArray(...

29得票1回答
Python和ctypes:如何正确地将“指向指针”的内容传递到DLL?

我有一个分配内存并返回它的DLL。DLL中的函数如下:void Foo( unsigned char** ppMem, int* pSize ) { * pSize = 4; * ppMem = malloc( * pSize ); for( int i = 0; i < *...

29得票2回答
如何使用ctypes将数组从C++函数返回给Python

我正在使用ctypes在Python中实现一个C++函数。该C++函数应返回一个指向数组的指针。不幸的是,我还没有弄清楚如何在Python中访问该数组。我尝试了numpy.frombuffer,但没有成功。它只返回了一些随意的数字数组。显然我没有正确地使用它。这里是一个包含大小为10的数组的简...

28得票6回答
如何在Python子进程之间传递大的Numpy数组而不保存到磁盘?

有没有一种好的方法可以在两个Python子进程之间传递大量数据而不使用磁盘?这里是我希望实现的卡通示例:import sys, subprocess, numpy cmdString = """ import sys, numpy done = False while not done: ...

28得票3回答
Python和Ctypes:将结构体作为指针传递给函数以获取数据

我浏览了其他答案,但好像无法让这个功能正常工作。我正在尝试调用一个与SMBus设备通信的DLL中的函数。此函数需要一个结构体指针作为参数,其中包含一个数组作为其字段之一。所以... 在C语言中: typedef struct _SMB_REQUEST { unsigned char...

27得票6回答
使用ctypes加载具有依赖项的c共享库

在Linux上,我有一个依赖于其他库的C共享库。LD_LIBRARY_PATH已正确设置以允许链接器加载所有库。当我执行以下操作时:libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path) 我遇到了以下错误:Traceback (most re...