История изменений
Исправление AntonI, (текущая версия) :
У меня под SWIG 3.08 типы полей структуры size_t и unsigned long long работают из коробки (кастуются к питоновскому long).
Но чисто для общего развития, а можно ли вручную создать такой extension без использования swig?
Можно, но это гемор. Хотя кроме SWIG есть еще какие то системы биндинга, я их не помню. SWIG хорош когда нужно малой кровью забиндить много сишного кода, или когда сишный код меняется а че то в прокладке адаптировать руками лень. Если кода мало и есть много каких то экзотических ситуаций - да, возможно вместо SWIG лучше взять что то другое. Но я пока не уверен что это Ваш случай…
Т.е. чтобы на стороне питона операции шли исключительно с объектами? Когда память под структуру инициализируется в конструкторе питоньего объекта, а фукнции можно передать объект, и она корректно возьмёт из его внутренностей структуру?
Есть две крайности - можно как Вы написали собрать в питоне объект (питоний) и отдать его сишной функции, которая через PyAPI его разберет. Это потребует много букв, PyAPI очень многословен, кроме того может потечь память (как Serral и
dave выше писали).
Можно на стороне питона через struct упаковать данные в строку отвечающую сишной структуре (если знаете как она устроена) и отдать сишной функции которая просто возьмет содержимое строки и кастанет указатель на него к нужному типу. Букв меньше, но нужно знать как все уложено в структуре.
Исправление AntonI, :
У меня под SWIG 3.08 типы полей структуры size_t и unsigned long long работают из коробки (кастуются к питоновскому long).
Но чисто для общего развития, а можно ли вручную создать такой extension без использования swig?
Можно, но это гемор. Хотя кроме SWIG есть еще какие то системы биндинга, я их не помню. SWIG хорош когда нужно малой кровью забиндить много сишного кода, или когда сишный код меняется а че то в прокладке адаптировать руками лень. Если кода мало и есть много каких то экзотических ситуаций - да, возможно вместо SWIG лучше взять что то другое. Но я пока не уверен что это Ваш случай…
Т.е. чтобы на стороне питона операции шли исключительно с объектами? Когда память под структуру инициализируется в конструкторе питоньего объекта, а фукнции можно передать объект, и она корректно возьмёт из его внутренностей структуру?
Есть две крайности - можно как Вы написали собрать в питоне объект (питоний) и отдать его сишной функции, которая через PyAPI его разберет. Это потребует много букв, PyAPI очень многословен, кроме того может потечь память (как Serral выше писал).
Можно на стороне питона через struct упаковать данные в строку отвечающую сишной структуре (если знаете как она устроена) и отдать сишной функции которая просто возьмет содержимое строки и кастанет указатель на него к нужному типу. Букв меньше, но нужно знать как все уложено в структуре.
Исходная версия AntonI, :
У меня под SWIG 3.08 типы полей структуры size_t и unsigned long long работают из коробки (кастуются к питоновскому long).
Но чисто для общего развития, а можно ли вручную создать такой extension без использования swig?
Можно, но это гемор. Хотя кроме SWIG есть еще какие то системы биндинга, я их не помню. SWIG хорош когда нужно малой кровью забиндить много сишного кода, или когда сишный код меняется а че то в прокладке адаптировать руками лень. Если кода мало и есть много каких то экзотических ситуаций - да, со SWIG-ом придется повозиться. Но я пока не уверен что это Ваш случай…
Т.е. чтобы на стороне питона операции шли исключительно с объектами? Когда память под структуру инициализируется в конструкторе питоньего объекта, а фукнции можно передать объект, и она корректно возьмёт из его внутренностей структуру?
Есть две крайности - можно как Вы написали собрать в питоне объект (питоний) и отдать его сишной функции, которая через PyAPI его разберет. Это потребует много букв, PyAPI очень многословен, кроме того может потечь память (как Serral выше писал).
Можно на стороне питона через struct упаковать данные в строку отвечающую сишной структуре (если знаете как она устроена) и отдать сишной функции которая просто возьмет содержимое строки и кастанет указатель на него к нужному типу. Букв меньше, но нужно знать как все уложено в структуре.