草庐IT

SWIG_NewPointerObj

全部标签

php - 模板类型作为 SWIG 中的结构数据成员

我正在使用SWIG为C++库编写PHP包装器,但我在使用具有模板类型实例作为数据成员的结构时遇到了问题。假设我有以下头文件:templatestructmyvector{};structS{myvectorv;};myvectorfoo();Sbar();和接口(interface)文件:%moduletest%{#include"test.hpp"%}%include"test.hpp"%template(IntVec)myvector;当我尝试使用直接返回myvector的函数时,它工作正常:$v1=test::foo();但是,当我尝试使用返回S对象的函数,并尝试访问其类型为my

c++ - 使用SWIG将自定义C++异常动态地重新抛出为Python异常

情况我想使用SWIG为C++API创建Python语言绑定(bind)。一些API函数可能会引发异常。C++应用程序具有自定义异常的层次结构,例如以下示例:std::exception->API::Exception->API::NetworkException->API::TimeoutException->API::UnreachableException->API::InvalidAddressException所需的行为如下:所有异常类型都应具有匹配的Python类,如包装器。这些包装器类应为有效的Python异常。当API调用引发C++异常时,应该是捕获到。对应的python

Ruby 和 SWIG 与 CMake

有没有人幸运地使用CMake通过SWIG创建Ruby绑定(bind)?我有一个在我的CMake文件中通过SWIG创建Python绑定(bind)的工作示例,但是当我使用相同的方法创建Ruby绑定(bind)时,实际的Ruby文件不会被创建。使用有效的Python绑定(bind),确实会创建一个Python文件。这是我的CMakeLists.txt文件的相关部分:if(${SWIG_FOUND})find_package(RubyREQUIRED)include_directories(${RUBY_INCLUDE_DIRS})include(${SWIG_USE_FILE})set(C

php - 使用 SWIG 在 PHP 中包装 boost::shared_ptr

如果我使用SWIG包装这个C++函数:boost::shared_ptrClient::create(){returnboost::shared_ptr(newClient());}然后在PHP中调用它:$client=Client::create();echogettype($client);$client的类型是resource,不是object,所以我不能调用Client方法。包装此功能的选项有哪些?我正在为其他人的C++库创建一个PHP包装器,因此重新编写代码以不使用boost::shared_ptr并不是一个真正的选择。这是迄今为止我想出的唯一解决方案:MyClientCli

Java/C++ SWIG - 使用数组参数调用函数

所以我的代码看起来像这样:booldoSomething(unsignedintx,constmyStruct1typeOne[2],myStruct2typeTwo[2]);使用swig我得到java代码:publicstaticbooleandoSomething(longx,myStruct1typeOne,myStruct2type2){}我想要的是:publicstaticbooleandoSomething(longx,myStruct1[]typeOne,myStruct2[]type2){}我知道问题在于SWIG无法知道我在Java中的数组将只有2个元素,因为java声

c++ - SWIG - 命名空间问题

我无法让以下简单示例与SWIG1.3.40一起使用(我也尝试过1.3.31)。只要我不将Foo结构包装在命名空间中,Foo结构就会作为Python模块出现,但一旦我这样做,我就会在生成的test_wrap.c中遇到编译错误。测试.h:#ifndef__TEST_H__#define__TEST_H__#defineUSE_NS1#ifUSE_NSnamespacens{#endifstructFoo{floata;floatb;floatfunc();};#ifUSE_NS}#endif#endif测试.cpp#include"test.h"#ifUSE_NSnamespacens{#

c++ - SWIG 无法识别字符串参数

我有一个令人沮丧的问题,让我花了很多时间来处理它,但我没有找到任何解决方案。我想在带有SWIG的PHP中使用C++类。我生成了我的共享对象,它对某些方法工作正常,但每当我使用字符串参数作为输入调用这些方法时,我都会遇到此错误:Fatalerror:Typeerrorinargument2ofPKI_Buf_initHex.ExpectedSWIGTYPE_p_std__stringPKI_Buf_initHex是SWIG自动生成的包装器类的名称。在我的C++代码中,我将initHex方法声明为:intinitHex(conststringx){..}我在我的接口(interface)文

python - 使用 python 包装的 c++ SWIG 模拟输入

我是swig和python单元测试的新手。这就是我想要做的。我有一个需要用户输入的C++函数。使用SWIG将C++代码包装到Python代码中。我正在尝试使用pythonsunittest模块来模拟输入。我试过模拟builtins.input并用c++编写我自己的基本函数,它只返回一个字符串并模拟它。当我到达c++代码中的std::cin时,模拟builtins.input仍然挂起。并模拟返回字符串的函数,不返回模拟的return_value。我的猜测是出于某种原因我无法模拟函数的返回值,因为它是真正的c++代码而不是真正的python。这是我正在使用的一些示例代码:c++我可以包含需

c++ - 来自 Python 的 SWIG C++ 类型的数组分配

我正在为一个使用SWIG公开其C++API的程序编写Python脚本。SWIG公开函数具有如下接口(interface):voidwritePixelsRect(JoxColor*colors,intleft,inttop,intwidth,intheight);JoxColor是一个POD结构,如下所示:structJoxColor{floatr,g,b,a;};我可以轻松地在Python中创建一个JoxColor并像这样调用writePixelsRect:c=JoxApi.JoxColor()c.r=rc.g=gc.b=bc.a=aJoxApi.writePixelsRect(c,

c++ - 使用 SWIG 在 Python 中访问 C++ typedef

我有一个C++API,我想用Python包装。我想调用一个包装的C++函数myfunc,将以下C++typedef作为参数/*my_header.h*/namespacemy_namespace{typedefstd::vectorBar}其中Foo是一个C++类。我设法包装了函数和底层类Foo,但我不知道如何创建Foo的vector。我将.h文件包含在我的SWIG.i文件中,如下所示/*my_interface.i*/%{#include"my_header.h"typedefmy_namespace::BarBar;%}%include"my_header.h"我还尝试在SWIG中