LINUX.ORG.RU

Python + SWIG


0

1

Всем здравия!

Есть примерно такая функция (getInfo.cpp):

BOOL WINAPI GetInfo( IN DWORD ID, IN OUT PDATA_INFO *Info ) { ... }

SWIG может сгенерировать обёртку?

Ругается на (getInfo.i):

%module get_info extern BOOL WINAPI GetInfo(IN DWORD ID, IN OUT PDATA_INFO *Info);

getInfo.i:2: Error: Syntax error in input(1).

В чём может быть проблема?

А он все эти 100500 макросов из .срр видит? Если нет, то в этом и проблема.

AIv ★★★★★ ()

Вот для работы с типами отличными от char, short, int и float я приличных обёрток не нашёл. Всё типа swig, ctypes, cython итп не хотят признавать другие типы, приходится руками такие вещи указывать.

Жутко неудобно.

true_admin ★★★★★ ()
Ответ на: комментарий от DrMartiner

ммм, в одном случае через google source search(по-моему, прикрыли лавочку) спёр кусок кода в котором этот вопрос уже решался.

В другом забил на это дело и написал всё на сях потому что задолбало cython обучать типам time_t, useconds_t итп.

В общем, похоже что только руками это можно сделать.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

У меня SWIG жрет не просто сложные типы, а шаблоны с кучей перегруженных операторов. Нормально... ну местами приходится поколдовать, но по большей части все автоматом.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

У меня SWIG жрет не просто сложные типы, а шаблоны с кучей перегруженных операторов

ммм, т.е. если я ему укажу, скажем #include <time.c> он timer_t сам подхватит? Пример кода, пожалуйста.

true_admin ★★★★★ ()
Ответ на: комментарий от DrMartiner

проще написать на плюсах, чем сгенерить обёртку для питона?

зависит от того на сколько сложная нужна обёртка. Может тебе вообще ctypes хватит.

true_admin ★★★★★ ()
Ответ на: комментарий от AIv

Ммм, занятно, почитаю. С ходу, правда, не нашёл ответ на свой вопрос.х

А по поводу ссылок в питоне как раз описано про owned и borrowed references. Отсюда и зависит когда увеличивать счётчик а когда нет. Ну а если valgrind ругается то 100% код кривой(тока там надо воткнуть supressions от питона чтобы ложной ругани не было, но там таких мест не очень много, около 10-20).

true_admin ★★★★★ ()
Ответ на: комментарий от AIv

typedef enum _ORD_HISTORY { Filedl1 = 0, Filedl2 } _ORD_HISTORY;

BOOL WINAPI GetOrds( IN DWORD PID, IN ULONG Ord, IN OUT _ORD_HISTORY *OrdInH);

Можешь привести пример обёртки (*.i) для функции и структуры?

DrMartiner ()
Ответ на: комментарий от DrMartiner

В статье (см выше) все написано. Ненужно никаких оберток - свиг сам достает из хидера все, что там есть.

Иногда бывает необходимо в .i что то подкручивать (типа инстанцирования шаблонов - сам он ес-но этого не сделает, работы с референсами на баз типы и т.д.)

С enum я не работал под свигом, если сходу не взлетит надо смотреть их доки, они кстати довольно подробные.

Ваша ошибка скорей всего связана с тем, что свиг не видит определения всех этих макросов в сигнатуре ф-ии. Наск мне помнится, свиг НЕ обрабатывает хидеры, включенные в обрабатываемый хидер.

AIv ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.