我使用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"
答案 0 :(得分:0)
您似乎在模块级别缺少启用导向器。 .i文件的第一行必须是:
%module(directors="1") MdApi
默认情况下,导演功能处于禁用状态。要使用控制器,您必须对接口文件进行两处更改。首先,添加"导演" %module指令的选项,如下所示:
%module(directors="1") modulename
如果没有此选项,将不会生成任何导演代码。其次,您必须使用
%feature("director")
指令告诉SWIG哪些类和方法应该获得控制器。