Python:SWIG:包装对结构的访问
Python: SWIG: Wrap Access to a Struct
假设我有一个只有一个字段的简单结构:
typedef struct {
MY_UNICODE value[512];
} TEST_STRUCTURE
其中 MY_UNICODE
是自定义 unicode 实现。
另外我有两种方法:
int UTF8ToMyUnicode(char *utf8, MY_UNICODE *unicode);
int MyUnicodeToUTF8(MY_UNICODE *unicode, char *utf8);
与此自定义类型相互转换。
现在我可以使用 SWIG
为此生成一个 Python 接口。
但是当我尝试访问 Python 中的 TESTSTRUCTURE.value
时。我总是得到一个指向 MY_UNICODE
对象的点。
我的问题是:如何包装对结构成员的访问,以便获得 python 字符串并可以使用 python 字符串设置值?
我知道 SWIG 的文档说了一些关于 memberin
类型映射的内容。
但是我的例子不起作用:
%module test
%include "typemaps.i"
// This is the header file, where the structure and the functions are defined
%include "test.h"
%typemap(memberin) MY_UNICODE [512] {
if(UTF8ToMyUnicode(, $input) != 0) {
return NULL;
}
}
%typemap(memberout) MY_UNICODE [512] {
if(MyUnicodeToUTF8(, $input) != 0) {
return NULL;
}
}
在生成的包装文件中,地图尚未应用。
如有任何帮助,我们将不胜感激!谢谢!
PS: 我正在使用 swig 2.0.10
我自己解决了这个问题。重要的是在接口中定义结构之前需要定义类型映射。文档对此并不清楚(或者我还没有看到)。此外,"in" 和 "out" 类型映射可用于转换值。
这个例子对我有用:
%module test
%include "typemaps.i"
%typemap(in) MY_UNICODE [512] {
if(UTF8ToMyUnicode(, $input) != 0) {
return NULL;
}
}
%typemap(out) MY_UNICODE [512] {
if(MyUnicodeToUTF8(, $result) != 0) {
return NULL;
}
}
// Now include the header file
%include "test.h"
假设我有一个只有一个字段的简单结构:
typedef struct {
MY_UNICODE value[512];
} TEST_STRUCTURE
其中 MY_UNICODE
是自定义 unicode 实现。
另外我有两种方法:
int UTF8ToMyUnicode(char *utf8, MY_UNICODE *unicode);
int MyUnicodeToUTF8(MY_UNICODE *unicode, char *utf8);
与此自定义类型相互转换。
现在我可以使用 SWIG
为此生成一个 Python 接口。
但是当我尝试访问 Python 中的 TESTSTRUCTURE.value
时。我总是得到一个指向 MY_UNICODE
对象的点。
我的问题是:如何包装对结构成员的访问,以便获得 python 字符串并可以使用 python 字符串设置值?
我知道 SWIG 的文档说了一些关于 memberin
类型映射的内容。
但是我的例子不起作用:
%module test
%include "typemaps.i"
// This is the header file, where the structure and the functions are defined
%include "test.h"
%typemap(memberin) MY_UNICODE [512] {
if(UTF8ToMyUnicode(, $input) != 0) {
return NULL;
}
}
%typemap(memberout) MY_UNICODE [512] {
if(MyUnicodeToUTF8(, $input) != 0) {
return NULL;
}
}
在生成的包装文件中,地图尚未应用。
如有任何帮助,我们将不胜感激!谢谢!
PS: 我正在使用 swig 2.0.10
我自己解决了这个问题。重要的是在接口中定义结构之前需要定义类型映射。文档对此并不清楚(或者我还没有看到)。此外,"in" 和 "out" 类型映射可用于转换值。 这个例子对我有用:
%module test
%include "typemaps.i"
%typemap(in) MY_UNICODE [512] {
if(UTF8ToMyUnicode(, $input) != 0) {
return NULL;
}
}
%typemap(out) MY_UNICODE [512] {
if(MyUnicodeToUTF8(, $result) != 0) {
return NULL;
}
}
// Now include the header file
%include "test.h"