I used swig to wrap some C++ Api to Python.
The c++ api looks like this.
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 defines some callback function behaviors. MdApi need to call RegisterSpi(CThostFtdcMdSpi *pSpi) to register those callback functions This is how I want to use this in python
class Quote(CThostFtdcMdSpi):
def OnFrontConnected(self):
pass
def OnFrontDisconnected(self, *args):
pass
md = CThostFtdcMdApi_CreateFtdcMdApi()
q = Quote()
md.RegisterSpi(q)
Python gave this error message:
def RegisterSpi(self, *args): return _MdApi.CThostFtdcMdApi_RegisterSpi(self, *args)
TypeError: in method 'CThostFtdcMdApi_RegisterSpi', argument 2 of type 'CThostFtdcMdSpi *'
This is my MdApi.i. Both MdApi and MdSpi are defined in ThostFtdcMdApi.h
%module MdApi
%{
#include "ThostFtdcMdApi.h"
%}
%feature("director") CThostFtdcMdSpi;
%feature("director") CThostFtdcMdApi;
%include "ThostFtdcMdApi.h"