如何将python对象传递给需要指针类型的函数

2024-09-29 00:21:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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"

Tags: selfapidefvirtualargspublicclassvoid
1条回答
网友
1楼 · 发布于 2024-09-29 00:21:37

看起来您缺少模块级别的启用控制器。.i文件的第一行必须是:

%module(directors="1") MdApi

directors documentation

The director feature is disabled by default. To use directors you must make two changes to the interface file. First, add the "directors" option to the %module directive, like this:

%module(directors="1") modulename

Without this option no director code will be generated. Second, you must use the %feature("director") directive to tell SWIG which classes and methods should get directors.

相关问题 更多 >