C-структура в Python

Есть libx.поэтому , который экспортирует 2 функции, и struct ,

typedef struct Tag {
    int num;
    char *name;
}Tag;

Tag *create(int n, char *n)
{
    Tag *t = malloc(sizeof(Tag));
    t->num = n;
    t->name = n;
    return t;
}

void use(Tag *t)
{
    printf("%d, %s\n", t->num, t->name);
}

Я хочу вызвать create в Python, а затем сохранить Tag * res , возвращенный create , позже я вызову use и передам сохраненный ранее Tag * res в use , вот он (просто для демонстрации) :

>>>libx = ctypes.CDLL("./libx.so")
>>>res = libx.create(c_int(1), c_char_p("a"))
>>>libx.use(res)

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

И моя проблема в том, как я могу сохранить результат, возвращенный create ? Поскольку он возвращает указатель на определяемую пользователем структуру , и я не хочу создавать аналог struct Tag в Python, c_void_p выполняет трюк?

ОБНОВЛЕНИЕ

Из ответа @David я все еще не совсем понимаю одну вещь:

указатель ( c_char_p ("a") ) действителен только в течение в вызов создать . Как только create вернется, этот указатель не будет дольше действителен.

И я назначаю c_char_p ("a") на t-> name в create , когда вызов create завершается , является ли t-> name висячим указателем? Потому что, согласно процитированным словам, этот указатель больше недействителен после create . Почему c_char_p ("a") больше не действует?

6
задан Alcott 27 February 2012 в 04:15
поделиться