我使用SWIG将一些C++ API包到Python。你知道吗
c++api如下所示。你知道吗
class CThostFtdcMdSpi
{
public:
virtual void OnFrontConnected(){};
virtual void OnFrontDisconnected(int nReason){};
virtual void OnHeartBeatWarning(int nTimeLapse){};
...
};
class MD_API_EXPORT CThostFtdcMdApi
{
public:
static CThostFtdcMdApi *CreateFtdcMdApi();
virtual void RegisterSpi(CThostFtdcMdSpi *pSpi) = 0;
...
}
MdSpi定义了一些回调函数行为。 MdApi需要调用RegisterSpi(CThostFtdcMdSpi*pSpi)来注册那些回调函数 这就是我想在python中使用它的方式
class Quote(CThostFtdcMdSpi):
def OnFrontConnected(self):
pass
def OnFrontDisconnected(self, *args):
pass
md = CThostFtdcMdApi_CreateFtdcMdApi()
q = Quote()
md.RegisterSpi(q)
Python给出了以下错误消息:
def RegisterSpi(self, *args): return _MdApi.CThostFtdcMdApi_RegisterSpi(self, *args)
TypeError: in method 'CThostFtdcMdApi_RegisterSpi', argument 2 of type 'CThostFtdcMdSpi *'
这是我的MdApi.i。MdApi和MdSpi都是在ThostFtdcMdApi.h中定义的
%module MdApi
%{
#include "ThostFtdcMdApi.h"
%}
%feature("director") CThostFtdcMdSpi;
%feature("director") CThostFtdcMdApi;
%include "ThostFtdcMdApi.h"
看起来您缺少模块级别的启用控制器。.i文件的第一行必须是:
从directors documentation:
相关问题 更多 >
编程相关推荐