SWIG: список Python для uint32_t *? - PullRequest
1 голос
/ 24 марта 2010

Я пытаюсь работать с модулем Python, созданным SWIG. Определен класс C ++, который работает следующим образом (упрощенно):

namespace Foo
{
    class Thing
    {
    public:
        Thing();
        ~Thing();

        bool DoSomething(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer);
    };
};

Когда я пытаюсь вызвать его из Python, я получаю сообщение о том, что последний аргумент должен иметь тип «uint32_t *». Обычные целые числа Python прекрасно работают для других аргументов, поэтому я не могу понять, почему список целых не будет работать для буфера. Есть предложения?

1 Ответ

2 голосов
/ 24 марта 2010

Последний параметр DoSomething - это указатель на uint32_t, а не uint32_t. Таким образом, в отличие от других параметров, функция ожидает получить указатель на целое число или массив целых чисел (поскольку массивы можно использовать везде, где ожидаются указатели).

Я подозреваю, что в этом случае (потому что он называется «буфер»), что функция ожидает массив. Вам следует взглянуть на документацию SWIG для Неограниченных массивов C.

...