问题标签 [swig]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3671 浏览

java - SWIG 指针和 Java 数组

SWIG 文档解释了 C 中的各种输入类型,如下所示:

... 在 Java 中都将采用单一类型的参数,如下所示:

同样,对于 C 中的返回类型:

...所有三个函数都将返回一个指向某个 Foo 对象的指针,该对象将被分配给一个 Java 对象变量,最后一个需要分配一个值类型,Java 垃圾回收将在释放时处理该值类型。

但是假设 spam5() 返回一个指向数组的指针。在 Java 中,我必须使用数组语义来访问各个元素,但我认为我不能这样做:

我什至认为编译器不会接受对 (Foo[]) 的强制转换,那么这在 SWIG 中如何工作?

0 投票
2 回答
2256 浏览

c++ - 带有 SWIG 包装类型的 Python 回调

我正在尝试将 python 回调添加到 C++ 库,如图所示:

这失败了,因为数据没有经过 swig,并且不是 PyObject。

我尝试使用:

但是因为它是一个模板,我真的不知道第二个参数该使用什么。即使我对“正确”的 SWIGTYPE 进行硬编码,它通常也会在 PyEval_CallObject 上出现段错误。

所以我的问题是:

  1. 调用 swig 类型包装的最佳方法是什么?

  2. 我在这里是否朝着正确的方向前进?导演看起来很有希望实现回调,但我找不到使用 python 的导演示例。

更新:正在生成正确的包装。我还有其他返回 shared_ptrs 并且可以正确调用它们的函数。

0 投票
2 回答
1106 浏览

c++ - 使用 SWIG 将 Ruby 嵌入到 C++ 应用程序中?

我过去使用 SWIG 成功创建了 Ruby-C++ 绑定,其中 C++ 代码被编译为动态库,Ruby 脚本连接到它。

但是,我想反过来做。使用 C++ 创建可执行文件并使其能够加载和执行 Ruby 代码。Ruby 也应该能够调用在 C++ 端定义的函数(当然,否则我需要的只是 'system()' 调用。)

SWIG 是否提供了实现这一目标的方法?

0 投票
3 回答
3338 浏览

c++ - 在 C++ 代码中发布 Python GIL

我有一个用 C++ 编写的库,我使用 SWIG 包装并在 python 中使用。通常只有一个类,方法很少。问题是调用这些方法可能很耗时——它们可能会挂起我的应用程序(调用这些方法时不会释放 GIL)。所以我的问题是:

为这些方法调用释放 GIL 的最简单方法是什么?

(我知道如果我使用 C 库,我可以用一些额外的 C 代码来包装它,但这里我使用 C++ 和类)

0 投票
2 回答
3625 浏览

python - 在 C 结构中使用带有指向函数的指针的 SWIG

我正在尝试为 C 库编写一个 SWIG 包装器,该库在其结构中使用指向函数的指针。我不知道如何处理包含函数指针的结构。下面是一个简化的例子。

测试.i:

示例会话:

任何人都知道是否有可能让t.my_func(1)返回 2?

谢谢!

0 投票
3 回答
5047 浏览

windows - 从 C++ 源文件创建 Windows DLL

我有多个 C++ 源文件,我想使用它们创建动态链接库。

我在 linux 中看到这种情况发生在 gcc -shared 和 ln

但是对于 Windows,我想我必须修改源文件才能生成 DLL。

有没有办法使用提供的源文件生成 DLL(类似于 linux 中的 *.so 的文件)。如果我错了,请纠正我,我认为 *so 是适用于 linux 的 dll。

需要这样做的原因是在 Windows Platfrom 中使用 SWIG 在 python 中调用 C++ 函数。我被困在需要我在 Windows 中生成 dll 的步骤上。

0 投票
1 回答
1308 浏览

python - 在 NI CVI 中嵌入 Python (LabWindows)

我需要从 Python 访问 LabWindows API 和/或用 labwindows 编写的函数。

到目前为止,我的方法已经能够在某种程度上使用 SWIG 在 Visual Studio 中执行此操作,但是当我尝试使用源文件和 SWIG 生成的包装文件在 Labwindows 中生成它时,我的 dll 创建失败。

0 投票
1 回答
588 浏览

c++ - 来自 dll 的运行函数的访问冲突

我有 DLL,C++ 接口可以和他一起工作。在 bcb 中,msvc 可以正常工作。我想使用 Python 脚本来访问这个库中的函数。使用 Swig 生成 python 包。

文件setup.py

文件dcm.i

运行这些命令(python 与扩展名 .py 相关联)

使用这个 DLL

在最后一个字符串上,我遇到了访问冲突。而且我使用输入参数对每个函数都有访问冲突。

DcmInterface.h(接口)

uRegistrationMessage.cpp(在 DLL 中实现)

工厂

DcmFactory.h(在客户端代码中使用 DLL)

0 投票
1 回答
287 浏览

lua - wxlua 绑定不适用于我使用 SWIG 制作的着色器对象

我使用 wxwdigets 做了一个类

我像这样为 SWIG 输入制作 abc.i 文件

//wxIPV4address 类 IPV4addressLua 的封装 //: public wxIPV4address ....................................

然后我编写 make 文件来生成 SWIG 绑定:===

~

...

===== 我像这样生成我的:-

g++ -g -shared -fPIC -o wxAppManagerLua.so ./wxAppManager_wrap.cxx ./wxAppManager/src/XMLReader.cpp ./wxAppManager/src/wxAppManager.cpp -I./ -I./wxAppManager/inc/ -I/usr/local/lib/wx/include/gtk2-ansi-debug-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXDEBUG__ -D__WXGTK__ -pthread -L/usr/local/lib -pthread -lwx_gtk2d_richtext-2.8 -lwx_gtk2d_aui-2.8 -lwx_gtk2d_xrc-2.8 -lwx_gtk2d_qa-2.8 -lwx_gtk2d_html-2.8 -lwx_gtk2d_adv-2.8 -lwx_gtk2d_core-2.8 -lwx_based_xml-2.8 -lwx_based_net-2.8 -lwx_based-2.8

=====

我这样写我的lua文件:

…………

...

我的代码在最后一行失败说..

===== 请注意..... wxSockAddess 是 wxIPV4address 的基类,我从中派生了我的类。

检查此链接http://docs.wxwidgets.org/trunk/classwx_i_paddress.html

任何人都可以帮忙吗?

我的诊断是:-

基本问题是每当我制作 sos 时......使用 SWIG 并尝试从 lua 引用函数或类......它工作正常,直到我引用任何 wxwidget 类或函数......即使我的两个 sos 也能够引用到跨sos的类......但不是wxwidgets类......虽然......如果我继续将wx.so的任何类引用到wx.so的任何其他类,它就可以工作......

请让我知道是什么阻止了 lua 理解我的类的类型到任何类的 wxwidgets。

我知道 wxwidgets 的绑定是通过传统方法生成的,而不是通过 SWIG 生成的 ..这会导致问题吗?

0 投票
1 回答
1668 浏览

c - 用 SWIG 包装 C 结构

我有包含以下类型定义的 C 头文件:

我尝试用 SWIG 包装这个结构,但显然我做错了什么。我的 SWIG 接口文件看起来像

但是如果我将头文件的内容复制到我的接口文件中,以便后者看起来像

我可以通过以下方式从 Ruby 访问结构

有没有办法自动包装头文件?不想每次改头文件的时候都把头文件的内容复制粘贴到接口文件中。

在此先感谢您的帮助。

-- t6d