我正在尝试使用swig将c++类接口翻译成其他语言。 我的c++界面如下:
这是mitprotocol.h文件
class MitProtocolCallBack
{
public:
virtual const string & TestFunc(deque<int> & param) = 0;
};
class MitProtocolInterface
{
public:
virtual void ReleaseMe() = 0;
virtual void SetCallBack(MitProtocolCallBack * mitProtocolCallBack) = 0;
virtual void UnTar(const string & filePathAndName) = 0;
};
MitProtocolInterface * CreateMitProtocolInterface();
在c++中,我可以这样使用这个接口:
这是一个文件测试.cpp地址:
class testclass : public MitProtocolCallBack
{
public:
void playhaha()
{
mitProtocolInterface->UnTar("");
}
private:
string str_res;
public:
virtual const string & TestFunc(deque<int> & param)
{
str_res = "abc";
return str_res;
}
private:
MitProtocolInterface * mitProtocolInterface;
public:
testclass()
{
mitProtocolInterface = CreateMitProtocolInterface();
mitProtocolInterface->SetCallBack(this);
}
~testclass()
{
mitProtocolInterface->ReleaseMe();
}
};
void main()
{
testclass haha;
haha.playhaha();
}
然后我尝试使用swig包装c++接口:
这是文件协议。i:
%module mitprotocol
%include "std_string.i"
%include "std_deque.i"
%{
#include "mitprotocol.h"
%}
namespace std {
%template(IntDeque) deque<int>;
}
%include "mitprotocol.h"
然后我执行了:
swig -c++ -python mitprotocol.i
然后我得到了两个文件:
file mitprotocol.py: for python interface
file mitprotocol_wrap.cxx: to compile with other c++ source codes as a lib
然后我尝试使用python接口:
这是一个文件测试.py地址:
import mitprotocol
class myclass(mitprotocol.MitProtocolCallBack):
def __init__(self):
self.mitProtocolInterface = mitprotocol.CreateMitProtocolInterface()
self.mitProtocolInterface.SetCallBack(self)
def __delete__(self):
self.mitProtocolInterface.ReleaseMe()
def TestFunc(self, param):
print param
return "aedfas"
def playhaha(self):
self.mitProtocolInterface.UnTar("")
ffsa = myclass()
ffsa.playhaha()
最后我发现了一个错误:
self.mitProtocolInterface.SetCallBack(self)
错误是:
TypeError: in method 'MitProtocolInterface_SetCallBack',
argument 2 of type 'MitProtocolCallBack *'
我认为它在尝试将python类实例传递给swig包装的c++接口时崩溃了。有人帮忙吗?你知道吗
有两个关键方面:
1.将多态性添加到.i文件:
2.python应用程序需要在init:
相关问题 更多 >
编程相关推荐