草庐IT

c++ - 调试 Python ctypes 段错误

我正在尝试从特定于Windows的程序中移植一些Pythonctypes代码,以链接到我的库的Linux端口。描述我的问题的最短Python代码示例如下所示。当我尝试执行它时,我在Python中的examine_arguments()中收到段错误。我在函数调用崩溃时在我的库中放置了一个printf语句,但它从未执行过,这让我认为问题出在ctypes代码中。importctypesavidll=ctypes.CDLL("libavxsynth.so")classAVS_Value(ctypes.Structure,object):def__init__(self,val=None):se

python - ctypes 中的 const void* 指针

如果我有一个可写的buffer,我可以使用ctypes.c_void_p.from_buffer函数来获取指向该缓冲区的C指针。但是如何处理不可写的缓冲区呢?如何形成一个const指针,我可以将其传递给需要constvoid*的C代码,而无需求助于制作不可写缓冲区的可写副本?我考虑过c_void_p.from_address但缓冲区(和内存View)似乎没有公开它们的地址。一些说明:>>>importctypes>>>b=buffer("somedatathatsupportsthebufferinterface,likeastr")>>>ptr=ctypes.c_void_p.fro

python - ctypes 回调函数的无效结果类型

我在使用ctypes实现时遇到问题。我有2个C函数:antichain**decompose_antichain(antichain*,int,char(*)(void*,void*),void**(*)(void*));counting_function**decompose_counting_function(counting_function*);其中antichain和counting_function是两个结构。反链可以看作一个集合,包含未知类型的元素(在这个例子中,counting_function)。decompose_antichain函数将用于分解反链包含的元素的函数

python - 在 Python 中验证 ctypes 类型精度

如果API需要64位类型,我如何检查ctypes如果sizeof类型有那么多位返回字节数?我如何知道当前平台上每个字节有多少位?CHAR_BIT在哪里在Python中定义? 最佳答案 C/C++函数签名是用C/C++类型编写的,例如“int”或“double”或“uint32_t”。所有这些都有对应的ctypes等价物,因此通常您不关心位数。也就是说……importosprintos.sysconf('SC_CHAR_BIT')...我认为,您将尽可能接近。不适用于非Unix平台。正如tMC在评论中指出的那样,它甚至不能在所有Uni

Python ctypes.WinDLL 错误,找不到 _dlopen(self._name, mode)

ctypes.WinDLL("C:\ProgramFiles\AHSDK\bin\ahscript.dll")Traceback(mostrecentcalllast):File"",line1,inFile"C:\Python26\lib\ctypes\__init__.py",line353,in__init__self._handle=_dlopen(self._name,mode)WindowsError:[Error126]Thespecifiedmodulecouldnotbefound我该如何解决?我在C:\Python26\lib\ctypes\__init__.py中

python - ctypes 中的 LP_* 指针和 *_p 指针有什么区别? (以及与结构的奇怪交互)

我无法理解Pythonctypes中LP_*(例如LP_c_char)和*_p(例如c_char_p)指针之间的区别。是否有区分它们的文档?我读到的关于*_p指针的少量内容表明它们更好(以某种未指定的方式),但是当我尝试将它们用作结构字段时,我得到了奇怪的行为。例如,我可以创建一个带有LP_c_char指针字段的结构:importctypeschar=ctypes.c_char('a')classLP_Struct(ctypes.Structure):_fields_=[('ptr',ctypes.POINTER(ctypes.c_char))]struct=LP_Struct(cty

python - Mac OS X Lion Python Ctype CDLL 错误 lib.so.6 : image not found

我是Python初学者。当我在MacOSXLion上使用类型库尝试以下Python示例代码时:#hello.pyfromctypesimport*cdll.LoadLibrary("libc.so.6")libc=CDLL("libc.so.6")message_string="HelloWorld!HelloPython!\n"libc.printf("Testing:%s",message_string)//出现如下错误:Traceback(mostrecentcalllast):File"cprintf.py",line2,incdll.LoadLibrary("libc.so.

Python:使用 ctypes 访问 DLL 函数——按函数 *name* 访问失败

myPythonClient(下图)想要调用一个ringBell函数(使用ctypes从DLL加载)。但是,尝试通过其名称访问ringBell会导致AttributeError。为什么?RingBell.h包含namespaceMyNamespace{classMyClass{public:static__declspec(dllexport)intringBell(void);};}RingBell.cpp包含#include#include"RingBell.h"namespaceMyNamespace{int__cdeclMyClass::ringBell(void){std::

c# - 在 python 中使用 ctypes 访问 C# dll 的方法

我想在我的python程序的关键部分实现C#代码以使其更快。它说(在Python文档和thissite上)您可以按如下方式加载动态链接库(也就是PyDocs):cdll.LoadLibrary("your-dll-goes-here.dll")这是我处理此功能的代码部分:fromctypesimport*z=[0.0,0.0]c=[LEFT+x*(RIGHT-LEFT)/self.size,UP+y*(DOWN-UP)/self.size]M=2.0iterator=cdll.LoadLibrary("RECERCATOOLS.dll")array_result=iterator.Pr

python - numpy 通过 ctypes 调用 sse2

简而言之,我正在尝试从python调用共享库,更具体地说,是从numpy。共享库是使用sse2指令在C中实现的。启用优化,即使用-O2或–O1构建库,我在通过ctypes调用共享库时遇到奇怪的段错误。禁用优化(-O0),一切都按预期进行,就像将库直接链接到c程序(优化或未优化)时的情况一样。您会在附件中找到一个片段,其中展示了我系统上描述的行为。启用优化后,gdb在__builtin_ia32_loadupd(__P)atemmintrin.h:113报告段错误。__P的值被报告为优化掉。测试.c:#include#includevoidtest(constintm,constdoub