Я пытаюсь вызвать библиотеку PJSUA2 из Python, она работает нормально, но я наткнулся на ловушку, пытаясь вызвать
void utilAddPendingJob(PendingJob *job)
, что приводит к следующей ошибке
Ошибка типа: в методе 'Endpoint_utilAddPendingJob', аргумент 2 типа 'pj :: PendingJob *'
Код Python выглядит следующим образом:
import pjsua2 as pj
class MyJob(pj.PendingJob):
def __init__(self, text):
self.text = text
def execute(self, is_pending = False):
print(text)
<<SNIP>>
job = MyJob("test")
pj.Endpoint.instance().utilAddPendingJob(job)
Единственное отличие, которое я вижу, состоит в том, чточто эта функция принимает указатель вместо ссылки на стороне C ++.Однако, просматривая руководство по SWIG, это не должно иметь значения.
Редактировать: Вот сгенерированный класс Python PendingJob SWIG:
class PendingJob(_object):
__swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, PendingJob, name, value)
__swig_getmethods__ = {}
__getattr__ = lambda self, name: _swig_getattr(self, PendingJob, name)
def __init__(self, *args, **kwargs):
raise AttributeError("No constructor defined - class is abstract")
__repr__ = _swig_repr
def execute(self, is_pending):
return _pjsua2.PendingJob_execute(self, is_pending)
__swig_destroy__ = _pjsua2.delete_PendingJob
__del__ = lambda self: None
PendingJob_swigregister = _pjsua2.PendingJob_swigregister
PendingJob_swigregister(PendingJob)
И сигнатура метода, снова SWIG сгенерировал код Python:
def utilAddPendingJob(self, job):
return _pjsua2.Endpoint_utilAddPendingJob(self, job)