如何将python对象传递给需要指针类型的函数 我使用SWIG将一些C++ API包到Python。
如何将python对象传递给需要指针类型的函数 我使用SWIG将一些C++ API包到Python。,python,c++,swig,Python,C++,Swig,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 CThostF
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文件的第一行必须是:
%module(directors="1") MdApi
从:
默认情况下,控制器功能被禁用。要使用控制器,必须对接口文件进行两次更改。首先,将“directors”选项添加到%module指令中,如下所示:
%module(directors="1") modulename
如果没有此选项,将不会生成控制器代码。其次,您必须使用%功能(“director”)
指令告诉SWIG哪些类和方法应该获得director
没有更多的代码很难判断,但这看起来可能与。。。如果是这样,请尝试定义
\uuuu init\uuuu
,并调用您的超级构造函数。我回答的第一部分:应该是一个完整的例子。您是否尝试过使用SWIG文档中描述的以及发行版附带的SWIG示例中所示的%功能(“director”)
?请显示您使用的.i文件。@Flexo我使用%feature(“director”),但错误仍然存在。@scholli我也上传了我的.i文件。我用错了吗?哦,你是对的。那是个愚蠢的错误!谢谢,它解决了我的问题!