我尝试使用SIP包装器C ++ for Python,但它失败了。我怎么能解决它?
我的软件'版本:
- QT 5.9.1 MSVC2015
- PYQT 5.9.1
- PYTHON 3.6.4
- SIP 4.19.8
// foo.h中
#ifndef FOO_H
#define FOO_H
#if defined(FOO_LIBRARY)
#define FOOSHARED_EXPORT __declspec(dllexport)
#else
#define FOOSHARED_EXPORT __declspec(dllimport)
#endif
FOOSHARED_EXPORT int len(const char* str);
#endif //FOO_H
// Foo.cpp中
#include <string.h>
#include<foo.h>
int len(const char* str)
{
return strlen(str);
}
// foo.sip
%Module(name=foo)
%UnitCode
#include <foo.h>
%End
int len(const char* str);
我使用了vs2015 craet foo.dll,foo.lib并使用了nmake(install)foo.pyd。
我试试import foo
,没关系。
不过,我使用foo.len("123")
,python告诉我错误:
len(): argument 1 has unexpected type 'str'
我不知道为什么......
--------------------------更新于2018.04.03 ---------------- -----------
今天,我试试foo.len("123".encode('gb2312'))
,这是对的!
但我不知道为什么..
我尝试按utf8
编译foo.dll,foo.lib,但错误相同。