我正在尝试创建一个python脚本来反汇编二进制文件(准确地说是Windowsexe)并分析其代码。我需要能够获取某个缓冲区,并提取某种结构,其中包含有关其中指令的信息。我以前用C语言使用过libdisasm,我发现它的界面非常直观和舒适。问题是,它的Python接口(interface)只能通过SWIG使用,我无法在Windows下正确编译它。在可用性方面,diStorm提供了一个很好的开箱即用的接口(interface),但它只提供了每条指令的助记符,而不是带有定义指令类型的枚举的二进制结构。这对我的目的来说非常不舒服,并且需要花费大量时间来包装界面以使其满足我的需求。我还查看了B
我在SWIG、共享指针和继承方面遇到了麻烦。我正在创建各种相互继承的C++类,使用boost共享指针来引用它们,然后包装这些共享使用SWIG的指针来创建python类。我的问题如下:B是A的子类sA是指向A的共享指针sB是指向B的共享指针f(sA)是一个需要指向A的共享指针的函数如果我将sB传递给f(),则会引发错误。此错误仅发生在python级别。在C++级别,我可以毫无问题地将sB传递给f()。我有boost1.40和swig1.3.40。以下是将重现问题的5个文件的内容与:pythonsetup.pybuild_ext--inplacepythontest.pyswig_shar
我已经搜索了几天,试图弄清楚如何将结构数组转换为Python列表。我有一个返回指向数组开头的指针的函数。structfoo{intmember;};structfoo*bar(){structfoo*t=malloc(sizeof(structfoo)*4);...dostuffwiththestructs...returnt;}从Python调用函数后,我得到了一个结构,但尝试访问数组的其他元素会导致错误:foo=bar()printfoo[1].memberTypeError:'foo'objectdoesnotsupportindexing我试过使用%array_class但无济
我已经用python编写了很多代码,而且效果很好。但现在我正在扩大我正在分析的问题的规模,而python速度慢得可怕。python代码比较慢的部分是foriinrange(0,H,1):x1=i-lengthx2=i+lengthforjinrange(0,W,1):#printi,',',j#checkthelimitsy1=j-lengthy2=j+lengthIntRed[i,j]=np.mean(RawRed[x1:x2,y1:y2])当H和W等于1024时,该函数需要大约5分钟的时间来执行。我已经编写了一个简单的c++程序/函数,它执行相同的计算并且在不到一秒的时间内以相同的
我有一个实现发布-订阅模式的EventDispatcher类。它的界面看起来像这样(简化):classEventDispatcher{public:voidpublish(conststd::string&event_name,std::unique_ptrevent);std::unique_ptrsubscribe(conststd::string&event_name,std::unique_ptrcallback);private:std::unordered_map>>m_subscriptions;}我想将此类公开给Python。最新的SWIG文档指出:Thereisnos
我已经为C库编写了一个Python扩展。我有一个看起来像这样的数据结构:typedefstruct_mystruct{double*clientdata;size_tlen;}MyStruct;此数据类型的用途直接映射到Python中的列表数据类型。因此,我想为导出的结构创建“类似列表”的行为,以便使用我的C扩展编写的代码更“Pythonic”。特别是,这是我希望能够做的(来自python代码)注意:py_ctsruct是在python中访问的ctsruct数据类型。我的需求可以概括为:list(py_ctsruct)返回一个python列表,其中包含从c结构中复制的所有内容py_cs
我发现swig为C++函数生成的Python包装器具有以下几行:defmy_func(arg):return_cpp_mod.my_cpp_func(arg)my_func=_cpp_mod.my_cpp_func.i文件中的源代码如下:%modulecpp_mod......%inline%{MyObj&my_cpp_func(arg){return*newMyObj(arg);}%}生成代码的所有功能似乎都正常。我想知道的是第三行的目的是生成的python代码。提前致谢。 最佳答案 这正是SWIG决定包装函数的方式。第一部分de
2月12日编辑我最近刚想出了一个奇怪的崩溃,使用一些SWIG为某些C++类生成的Python包装器。似乎SWIG和Python的结合有点急于清理临时值。事实上,它们是如此渴望,以至于在它们还在使用的时候就被清理干净了。一个显着压缩的版本看起来像这样:/*Example.hpp*/structFoo{intvalue;~Foo();};structBar{FootheFoo;Bar();};/*Example.cpp*/#include"Example.hpp"Bar::Bar(){theFoo.value=1;}Foo::~Foo(){value=0;}/*Example.i*/%mo
我有一个wx.py.Shell.shell小部件,它允许用户执行与我的程序交互的python代码。我希望能够将用户在此空间中定义的函数传递到我的C++代码(通过wxswig生成的围绕我的自定义小部件的包装器)并执行它。在我的C++代码中,我使用std::function类来调用绑定(bind)函数(C++或Python)所以我创建了一个简单的类来用函数调用运算符包装PyObject。但是,当我尝试调用PyObject*时出现段错误。classPyMenuCallback{PyObject*Func;public:PyMenuCallback(constPyMenuCallback&op
我在C++中有一个类,它是一个模板类,这个类的一个方法在另一个占位符上模板化templateclassWhatever{public:templatevoidfoo(std::vectorvalues);}当我将这个类传输到swig文件时,我做了%template(Whatever_MyT)Whatever;不幸的是,当我尝试从python对Whatever_MyT的实例调用foo时,出现属性错误。我以为我必须用实例化成员函数%template(foo_double)Whatever::foo;这是我会用C++编写的内容,但它不起作用(我收到语法错误)问题出在哪里?