我正在使用SWIG开发Python模块并与某个库链接。 我有一个如下的类型图:
%typemap(in) MyStringType {
char* buffer = 0;
size_t size = 0;
int alloc = SWIG_OLDOBJ;
int res = SWIG_AsCharPtrAndSize( $input, &buffer, &size, &alloc );
if (!SWIG_IsOK(res)) {
SWIG_exception_fail(SWIG_TypeError, "in method '$symname', expecting string");
}
$1.p = buffer;
$1.n = size - 1;
}
我有一些函数将MyStringType作为参数:
void myFunc(MyStringType type);
然后,当我创建python模块时,我在python 2.7中执行以下操作:
myFunc("Test string")
但是,当我尝试使用Python 3.4时,我得到以下信息:
TypeError: in method 'myFunc', expecting string
我可以通过将其添加到swig接口文件中来解决此问题:
%begin %{
#define SWIG_PYTHON_STRICT_UNICODE_WCHAR
%}
那解决了问题。但是,我仍然需要添加一个宏,因为其他一些功能也需要它。所以,现在是这样的:
%begin %{
#define SWIG_PYTHON_STRICT_BYTE_CHAR
#define SWIG_PYTHON_STRICT_UNICODE_WCHAR
%}
这会让我这样称呼myFunc:
myFunc(b"Test string")
在我的PC中使用python,2.7、3.4和3.5的tox时,一切工作正常,但在travis-ci中失败。 在删除“测试字符串”之前的b后,它在travis-ci中成功,但在我的PC中失败。 在travis-ci中,我有:python:2.7.6、3.4.3 在我的电脑中:python:2.7.13,3.4.8
知道为什么吗?
答案 0 :(得分:0)
已解决。感谢所有提示。 是不同的痛饮版本。