Я создаю оболочку Python для существующей кодовой базы с DLL и заголовком. Я использую SWIG.
База кода имеет несколько структурных указателей, например:
typedef struct session* session_t;
В этом примере session
больше нигде не определено. Все остальные функции в DLL принимают session_t
в качестве входных данных. Если я пытаюсь ссылаться на session
где-нибудь в сгенерированном SWIG-коде, я получаю ошибки компиляции, которые session
не определены. Мне нужен способ доступа к значению session_t
в коде Python.
Я пытался использовать макросы cpointer.i и pointer_functions, но это не работает, поскольку предполагается, что тип ввода не является указателем.
Я подумал, что смогу переопределить структуру:
typedef struct Session {} session, *session_t;
Это может сработать, но я не могу найти способ сделать это с SWIG.
Есть ли способ получить доступ к значению указателя структуры с помощью SWIG, если это единственное определение, являющееся указателем структуры typdef?
Редактировать: возможным исправлением является директива SWIG %ignore
. Может быть в состоянии игнорировать исходную структуру def и заменить ее в файле .i.
Решено (ish): Я отметил ответ Марка Толонена как правильный, поскольку в нем много полезной информации. API, который я пытаюсь обернуть, содержит множество удаленных конструкторов и поведений, фиксирующих его использование. В итоге я написал оболочку C ++ в своем собственном пространстве имен, а затем сказал Swig игнорировать все, кроме моего пространства имен. Затем я использую только стандартные или свои собственные типы для взаимодействия с Swig / Python.