草庐IT

c++ - Python Ctypes 崩溃调用 C++ 函数的 C 包装器

我正在尝试使用PythonCtypes来连接已发布的(闭源)C++库。我(尝试)编写了一个基本的C风格函数包装器来构造C++vector风格对象并调用C++例程。我还(尝试)编写了一个基本的python脚本来加载共享库。除了调用C++例程的行外,一切正常:***glibcdetected***python:free():invalidnextsize(fast):0x0000000001e73c00***这是文件,不幸的是我不能分享标题,但如果需要我可以写一些类似的东西......gaumixmod.cpp:#include"nr3.h"#include"cholesky.h"#inc

c++ - 用 Python+ctypes、segfault 包装 C++ 动态数组

我想用ctypes包装一个分配数组的小C++代码,但将地址存储在c_void_p对象中有问题。(注意:指针有意转换为void*,因为稍后我也想以相同的方式为C++对象数组进行分配。)要包装的C(++)函数:void*test_alloc(){constintsize=100000000;int*ptr=newint[size];std::cout(ptr);}voidtest_dealloc(void*ptr){int*iptr=static_cast(ptr);std::coutPython包装器(假设前面的函数已经用ctypes导入):classTestAlloc(object):

c++ - ctypes 类成员访问段错误

我有兴趣在Python中使用C++类。看着CallingC/C++frompython?,我决定尝试ctypes。但是,当我尝试更改类成员的值时出现段错误。这是一个重现我的问题的简单示例:C/C++方面:#includeclassFoo{private:intmValue;public:voidbar(){std::coutbar();}voidFoo_setValue(Foo*foo,intv){foo->setValue(v);}voidFoo_setValue2(Foo*foo){foo->setValue2();}}代码在OSX上编译:g++-c-fPICfoo.cpp-ofo

python - 使用 ctypes 捕获 c++ 共享库日志条目

我有一个带有c接口(interface)的cplusplus共享库,它在标准输出中写入日志条目。我在使用ctypes库的python应用程序中使用它。python应用程序使用logging库来写入日志条目。我需要做的是捕获共享库的标准输出条目以使用logging模块写入日志条目。换句话说,我想将c库的stdout条目重定向到logging模块,这样我就可以使用logging来使用它的处理程序写入文件和控制台。我发现可以捕获标准输出(seethisSOquestion),但我只能在c模块调用结束时访问它,因此它对日志记录没有用。我想要一种无阻塞的方式来访问标准输出条目。一个最小的例子如下

python - 如何将 BitString 转换为 ctypes 字节数组?

我刚开始使用BitString和ctypes,我有一个二进制文件的一部分存储在startdata中,一个BitArray类。>print(startdata)0x0000000109f0000000010605ffff现在,我必须按原样将这些数据传递给一个以unsignedchar*作为参数的C函数,所以我首先尝试做这样的事情:buf=(c_ubyte*len(startdata))()最终做到这一点:buf_ptr=cast(pointer(buf),POINTER(c_ubyte))这行得通,但是如何将字节数据从startdata分配到我刚刚创建的数组/缓冲区?这行不通:>buf=

python - 如何将 char 指针从 python 传递给 C++ API?

我正在尝试从我的python代码中调用以下C++方法:TESS_APITessResultRenderer*TESS_CALLTessTextRendererCreate(constchar*outputbase){returnnewTessTextRenderer(outputbase);}我对如何将指针传递给方法有困难:遵循正确的方法吗?textRenderer=self.tesseract.TessTextRendererCreate(ctypes.c_char)或者我应该这样做:outputbase=ctypes.c_char*512textRenderer=self.tess

python - 使用 Python Ctypes 和 C++ 时如何解决段错误?

假设我在C++中有以下两个函数签名:BYTE*init(BYTE*Options,BYTE*Buffer)和:intnext(BYTE*interface,BYTE*Buffer)我的想法是,我首先在C++中初始化一个Interface类,然后从Python调用next函数,并引用该类。第一个函数通过以下方式返回指向接口(interface)的BYTE指针:Interface*interface;//initializestuffreturn((BYTE*)interface);我在Python中这样调用它:classFoo:definit(self,data):#leftout:se

c++ - 如何使用 Python 2.7.2 将 C++ 枚举转换为 ctypes.Structure?

我找了又找,但我还没有找到一个可以完成我需要做的事情的例子。我发现HowcanIrepresentan'Enum'inPython?在这里,但它不包括ctypes.Structure。我还发现Usingenumsinctypes.Structure在这里,但它包含我不熟悉的指针。我有一个包含typedef枚举的头文件,我需要在Python文件的ctypes.Structure中使用它。C++头文件:typedefenum{ID_UNUSED,ID_DEVICE_NAME,ID_SCSI,ID_DEVICE_NUM,}id_type_et;Python文件(我目前使用的方式):class

c++ - ctypes python std::字符串

我正在使用C++作为后端使用ctypes。现在在C++中有这样一个函数:voidHandleString(std::stringsomething){...}我想知道如何从python调用这个函数-没有ctype(c_char_p显然不会工作)来向这个函数发送一个字符串参数......我怎样才能解决这个问题并将一个字符串从Python传递到C++(并将参数更改为char*一些不是和选项)PS我可以创建这样的解决方法吗?将python字符串作为c_char_p发送到将char*转换为std::string的C++函数以某种方式返回字符串或其指针???!!(如何?)到python将它从py

c++ - 从 C++ 修改 python 列表

我得到了一个Python列表,我可以获取它的指针并将该指针地址传递给C++以进行处理MyPointer=TheList.as_pointer()现在我使用ctypes将这个地址传递给C++在C++中,我可以执行以下操作:*(float*)MyPointer=2.0f;//forexamplePython值会立即更新,现在的问题是:如何扩展或删除一些值(比如直接从C++修改列表)因为我感觉到这些数据是一个std::vector如何做push_back等等以快速调整大小(因为在Python中迭代非常慢) 最佳答案 仅给定该指针,您无法扩