【发布时间】:2021-12-28 16:12:08
【问题描述】:
也许有人知道,如何重写 getVersion 以获取 Python version 和 legacyVersion 作为函数的结果,而不是将它们传递为 输入/输出参数
class DeviceInterface {
public:
virtual uint32_t getVersion(uint8_t* version, uint8_t* legacyVersion ) = 0;
};
现在我在 SWIG 接口文件中创建了额外的函数,但当前的实现只返回一个参数而不是两个。
%ignore DeviceInterface::getVersion( uint8_t* version, uint8_t* legacyVersion );
%extend DeviceInterface {
virtual char * getVersion() {
static uint8_t _v[200];
static uint8_t _lv[200];
$self->getVersion(_v, _lv);
return (char *)_lv;
}
};
更新
现在我使用 @ignore 和 @extend 功能。但我想还有更优雅的方式。这是我的工作 SWIG 界面 sn-p:
%extend DeviceInterface {
virtual PyObject *getVersion() {
static uint8_t _v[200];
static uint8_t _lv[200];
uint32_t libCode = $self->getVersion(_v, _lv);
return Py_BuildValue("(l,s,s)", libCode, (char *)_v, (char *)_lv);
}
};
【问题讨论】: