草庐IT

SWIG_NewPointerObj

全部标签

java - 如何使用 Swig 将数组(java 中的 long 数组)从 Java 传递到 C++

我有如下示例.h文件:classTest{public:voidSelectValues(longlongvalues[])};我使用SWIG并从下面的.i文件创建了JNI接口(interface)%moduleMyLib%include"carrays.i"%array_functions(longlong,long_long_array)%{#include"Test.h"%}/*Let'sjustgrabtheoriginalheaderfilehere*/%include/*Thislineisusedforcallingconventions*/%include"Test.h

c++ - 使用 SWIG 处理 std::function

显然,SWIG不理解std::function并破坏了Python绑定(bind)。例如,这适用于C++://SomewhereintheAPItypedefstd::functionUnitErrorHandler;//SomewhereelseintheAPIvoidUnit::setErrorHandler(constUnitErrorHandler&handler){}//Intheapplicationcodeunit->setErrorHandler([](constUnitError&error){std::cerr但这会破坏代码(除了为了简单起见而具有不同的行为,但这不

c++ - Python ctypes 回调函数到 SWIG

我有一个需要函数指针(WNDPROC)的SWIGC++函数,并想给它一个已被ctypes.WINFUNCTYPE包装的Python函数。在我看来,这应该是兼容的,但是SWIG的类型检查会抛出异常,因为它不知道ctypes.WINFUNCTYPE类型实际上是一个WNDPROC。我该怎么做才能将我的回调传递给SWIG以便它理解它? 最佳答案 我没有Windows机器来真正检查这个,但我认为你需要创建一个类型映射来告诉swig如何将PyObject包装器转换为WNDPROC://assumingthewrappedobjecthasana

c++ - 如何从 python SWIG 包装器向下转换 c++ 对象?

问题:我使用SWIG在python中包装了一些c++代码。在python方面,我想采用包装的c++指针并将其向下转换为指向子类的指针。我在SWIG.i文件中添加了一个新的c++函数来执行此向下转换,但是当我从python调用它时,我得到了TypeError。详情如下:我有两个C++类,Base和Derived。Derived是Base的子类。我有第三个类Container,它包含一个Derived,并提供一个访问器。访问器将Derived作为constBase&返回,如下所示:classContainer{public:constBase&GetBase()const{returnde

php - 从 PHP Web 应用程序调用 C++ 库 : system() vs SWIG PHP extension?

我有一个PHPWeb应用程序需要调用C++库中的函数。该库由供应商提供(Linux机器上的libfoo.a)。我的第一直觉是创建一个链接到libfoo.a的C++可执行文件,并将命令行参数传递给该函数。然后,PHPWeb应用程序可以对我的C++可执行文件执行system()调用。这将很容易实现。我担心的是为每次调用创建一个新的系统进程是否会增加很多开销。这个开销是多少?另一种方法是,我可以使用SWIG将C++函数包装在PHP扩展中,但我没有C++源代码。SWIG是否支持与“.a”库链接?是否需要我团队中的所有其他工程师更改他们的PHP配置以在libfoo.a中构建?如果system()

c++ - 如何使用 SWIG 将 C++ operator[] 包装在命名空间内的模板类中?

我正在使用SWIG仅使用其头文件来包装现有的C++库。该库使用命名空间和模板类来创建自定义对象数组。我在尝试包装用于访问包装数组内元素的下标运算符(operator[])时遇到问题。SWIG告诉我operator[]被忽略了,我应该改用%extend:small.i:18:Warning389:operator[]ignored(considerusing%extend)所以我正在尝试使用扩展,但无论我尝试过什么语法,我都无法让插入的代码显示在_wrap.cxx文件中。这是我的SWIG输入文件:%moduletltest%{...%}namespacenite{templateclas

c++ - 使用 SWIG 将 C++ char* 转换为 Java 中的 char[] 而不是 String

我正在尝试用Java包装以下C++函数:char*MyClass::to_cstring();此函数的输出作为JavaString对象返回。我希望它作为char[]Java数组返回。我目前正在使用“typemaps.i”和“std_string.i”。有没有一种方法可以覆盖该行为,使std::string仍作为JavaString返回,但char*作为Javachar数组返回?如何使用Javabyte[]而不是char[]这样就不必担心8位C++字符和Java的16位Unicode之间的转换? 最佳答案 为此,您需要将SWIG提供的

c++ - 使用 Windows .dll 中的 SWIG 包装函数

我在使用通过SWIG接口(interface)导出的.dll共享库中的函数时遇到问题。VersionInfoPython:2.6.4Swig:2.0.4大图是:我有一些代码在Linux下使用C++开发并使用SWIG包装。我在Linux下将C++源代码编译成.so对象,并在Python中使用.so库。现在,我需要将所有这些功能迁移到Windows,Windows中.so的等价物是.dll。因此,我打算将所有的C++源代码编译成一个.dll并通过Python访问它们。所以正常的过程是:拥有C++源代码->使用SWIG包装它们->编译成.dll->通过Python访问。有一个巨大的.cxx源

c++ - SWIG C++ Python 多态和多线程

我正在使用SWIG将第三方C++包集成到Python应用程序中.该软件包通过网络连接到专有API并接收更新。总体流程是python实例化一个C++对象,调用它的函数来设置它,然后等待更新。我使用SWIG'sdirectorsfeature实现了更新回调机制,并且在从python或python调用的C++函数进行测试时,它运行良好。也就是说,我能够在Python中继承一个C++类,从C++调用它的虚函数,然后看到python代码优先执行。问题:当我收到来自网络的更新时,我得到:Thethread'Win32Thread'(0x1f78)hasexitedwithcode0(0x0).Un

c++ - 通过 SWIG 从 Python 访问 UtcTimeStamp

我想这是一个python与SWIG的问题比其他任何问题都重要......我正在使用带有SWIGPython绑定(bind)的C++包。我收到的对象之一是一个UTC时间戳,我正试图从中提取时间戳。该对象具有以下特征:>>>printtype(obj)>>>printdir(obj)['__class__','__cmp__','__delattr__','__doc__','__eq__','__format__','__ge__','__getattribute__','__gt__','__hash__','__hex__','__init__','__int__','__le__'