swig、python 和 wchar_t 问题

2024-01-02

我是 Python C 绑定 swig 的新手,并且已经尝试解决这个问题有一段时间了。我有一个外部 C 库 (Example.c),我想从 Python 调用它。我阅读了 Swig 教程并能够立即生成包装器。现在的问题是,当我调用 API 时,我得到了以下信息:

>>> import Example
>>> dir(Example)
['Example_CreateConnection', 'trimmed to fit the screen']
>>> Example.Example_CreateConnection("")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: in method 'Example_CreateConnection', argument 1 of type 'ExampleChar const *'

好像找不到类型ExampleChar。以下是我的 swig 文件:

%module Example
%{
#include "ExampleSDK.h"
%}

%include "ExampleTypes.h"
%include "ExampleSDK.h"

ExampleTypes.h 看起来像这样:

#ifndef ExampleTypes_H
#define ExampleTypes_H

typedef wchar_t ExampleChar;

#endif /* ExampleTypes_H */

ExampleSDK.h 如下所示:

#ifndef ExampleSDK_H
#define ExampleSDK_H

#include "ExampleTypes.h"
void Example_CreateConnection(const ExampleChar *temp);

#endif /* ExampleSDK_H */

以下是调用以生成包装器的命令行:

swig -python -I. Example.i
gcc -c Example.c -I/Developer/SDKs/MacOSX10.6.sdk/usr/include/
gcc -c Example_wrap.c -I/usr/include/python2.6 -I.
gcc -bundle -flat_namespace -undefined suppress -o _Example.so Example_wrap.o Example.o -L/usr/lib/python2.6/config/ -lpython2.6

下面是 Example.c 的样子:

#include "runetype.h" // for Mac wchar_t definition

#include "ExampleSDK.h"

void Example_CreateConnection(const ExampleChar *temp)
{
    //do nothing
}

我不确定它出了什么问题。我希望有人能够指出我在这里犯的错误。谢谢。

Regards,

林全


上次我用过wchat_t使用 SWIG+Python 我最终需要添加如下内容:

%include "pywstrings.swg"
%include "pystrings.swg"
%include "std_string.i"
%include "typemaps.i"  

%fragment("SWIG_AsVal_wchar_t", "header", fragment="<wchar.h>") {
    SWIGINTERN int SWIG_AsVal_wchar_t(PyObject* p, wchar_t* c) {
        return SWIG_OK;
    }
}
%fragment("SWIG_From_wchar_t", "header", fragment="<wchar.h>") {
    SWIGINTERNINLINE PyObject* SWIG_From_wchar_t(wchar_t c) {
        return SWIG_Py_Void();
    }
} 

// Python -> C
%typemap(in) wchar_t const * {
  $1 = PyString_to_wchar_t($input);
}

// C -> Python
%typemap(out) wchar_t * {
  $result = wchar_t_to_PyObject($1);
}

在我的 Swig 接口文件中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swig、python 和 wchar_t 问题 的相关文章

随机推荐

  • 提示 HINT_PASS_DISTINCT_THROUGH 将 PageRequest 每页返回的实体数量减少到配置的页面大小以下 (PostgreSQL)

    我正在设置一个基于 JPA 规范的存储库实现 该实现利用 jpa 规范 基于 RSQL 过滤器字符串构建 来过滤结果 定义结果排序并通过 不同 删除任何重复项 否则这些重复项将因连接表而返回 JPA 规范构建器方法连接多个表并设置 不同 标
  • 计算 Linux 目录中的文件数量? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要计算目录中的文件数量 我通常使用 ls directory wc l 但是还有另一个命令不使用wc 这是一 ls l egrep c N
  • 如何使用 SQL 数据库中的纬度和经度查找最近的位置?

    我想从以下数据库表中找到最近的位置 Address Latitude longitude Kathmandu 44600 Nepal 27 7 85 33333330000005 Los Antoniterstra e 37 09024 9
  • Lua 5.2 问题:lua_pcall 中的“尝试调用 nil 值”

    我在从 C 调用 Lua 5 2 函数时遇到问题 这是 Lua 块 名为 test lua function testFunction print Hello World end 这是 C int iErr 0 Create a lua s
  • IndexError:索引 14708 超出尺寸 295 的轴 0 的范围

    我正在尝试用 yolo 制作对象检测软件 但出现了这个错误 我迷失了方向 谁能帮我 代码不完整 如果这篇文章有任何错误 我很抱歉 因为我是新的 Stackoverflow 该教程来自 Traceback most recent call l
  • 您区分文本编辑器和 IDE 吗?

    我见过一些针对 IDE 问题的回复 其中建议使用文本编辑器 反之亦然 这让我认为人们将它们视为同一件事 我对此做出了明确的区分 如何定义 文本编辑器 和 IDE 您看到这两个工具之间有什么区别吗 请注意 我接受了一个我认为最能解决 文本编辑
  • Rails - 在保存到服务器之前将 DateTime 转换为 UTC

    我不知道如何 但我的控制台和服务器有两个不同的 DateTime now 时区 如果我在控制台中运行 DateTime now 则会返回以下内容 Wed 04 Dec 2013 14 27 23 0500 但是 我的任务模型中有以下内容 d
  • JavaScript 中求和指数

    var total 0 for x 1 x lt 16 x var y x 1 var singleSum Math pow x y Math pow y x total total singleSum document write tot
  • TypeScript 中关联对象数组的接口

    我有一个像这样的对象 var obj key1 apple key2 true key3 123 key n So obj可以包含任意数量的命名键 但值必须全部是字符串 布尔值或数字 我如何声明类型obj作为 TypeScript 中的接口
  • 在 Python 运行时创建对象

    当涉及到在运行时创建对象时 我在理解 OOP 概念时遇到了问题 我研究过的所有教育代码都定义了特定的变量 例如 Bob 并将它们分配给一个新的对象实例 鲍勃 人 我现在无法理解的是如何设计一个在运行时创建新对象的模型 我知道我的措辞可能有错
  • 如何计算日出和日落时间(matlab)?

    我需要在 Matlab 中计算日出和日落时间 但我找不到正确 且简单 的方法来做到这一点 我需要得到与以下内容相同的结果 https www esrl noaa gov gmd grad solcalc https www esrl noa
  • 实现 IEnumerable 时遇到问题

    我正在尝试编写自己的 简单的 List 实现 这就是我到目前为止所做的 using System using System Collections Generic using System Linq using System Text na
  • 限制直接 url 下载图像

    我不久前问过这个问题并得到了我认为可行的答案 但我仍然遇到问题 也许这是我做错的事 但我仍然没有这个权利 我想限制对整个目录的访问 该目录中包含图像和 pdf 文件 我需要创建 pdf 文档的链接并将图像嵌入到锚标记中 有人告诉我为此使用标
  • 将多个属性元数据添加到工作流活动中的依赖属性

    我正在 Windows 工作流中构建许多自定义活动 我需要添加一个 DependencyProperty 它可以list该属性的多个值 用户可以在使用活动时选择这些值 例如对或错 我知道如何使用 PropertyMetadata 简单地传递
  • 使用 JavaScript 循环遍历日期范围

    给定两个Date 对象 其中一个小于另一个 我如何在日期之间每天循环 for loopDate startDate loopDate lt endDate loopDate 1 这种循环会起作用吗 但是如何向循环计数器添加一天呢 Thank
  • ngOnInit 中未定义角度异步输入?

    我有一个父组件通过 API 将数据传递给子组件 如下所示 ts private loadData this data this apiService getData html
  • 在 Scala 中实现多级 Java 接口

    我有以下层次结构java for my interface public interface Identifiable
  • 在 ng-click 上调用超出范围的 javascript 函数

    我有一个 javascript 库 其中包含许多有用的函数 我在网站上使用它们来执行各种操作 我知道我无法通过 ng click 访问这些函数 因为这些函数超出了范围 有没有一种方法可以访问它们 而无需声明仅调用库中函数的作用域函数 Her
  • 如何从合并中排除文件?

    我刚刚开始了解 git 目前正在考虑合并 假设我有一个主分支 并创建一个名为子分支的分支 我在子分支上工作并更改了一些文件 现在我想将这个子分支合并到主分支中 git merge child 然而 子分支中有一些文件 也在主分支中 我不想合
  • swig、python 和 wchar_t 问题

    我是 Python C 绑定 swig 的新手 并且已经尝试解决这个问题有一段时间了 我有一个外部 C 库 Example c 我想从 Python 调用它 我阅读了 Swig 教程并能够立即生成包装器 现在的问题是 当我调用 API 时