Передача нескольких аргументов функции C в Python - PullRequest
1 голос
/ 28 января 2010

Допустим, у меня есть библиотека c, которая каким-то образом манипулирует миром.

Я хочу использовать эту библиотеку с python. Я хочу быть в состоянии написать простые сценарии Python, которые представляют различные сценарии управления миром.

У меня есть функции, которые создают и разрушают мир: void * create (void); int destroy (void * world);

Вот код Python:

import ctypes

lib = ctypes.CDLL('manage_world.so')

_create = lib.create
_create.restype = ctypes.c_void_p

_destroy = lib.destroy
_destroy.argtypes = [ctypes.c_void_p,]
_destroy.restype = ctypes.c_int

def create_world():
    res =  _create()
    res = ctypes.cast(res, ctypes.c_void_p)
    return res

def destroy_world(world):
    return _destroy(world)

new_world = create_world()
print type(new_world)

print destroy_world(new_world)

Теперь я хочу добавить такие функции, как: int set_world_feature (void * world, feature_t f, ...); int get_world_feature (void * world, feature_t f, ...);

Дело в том, что в моей оболочке Python я не знаю, как передать несколько различных аргументов.

Потому что иногда set_world_feature () вызывается с 3 или 4 аргументами.

В Python снова:

def set_world_feature(world, *features):
    res = lib.set_world_feature(world, *features)
    return world_error[res]

Как это исправить, чтобы это работало?

1 Ответ

1 голос
/ 28 января 2010

Когда вы делаете:

def create_world():
    return _create

Вы не вызываете _create, поэтому create_world возвращает указатель на функцию. Если вы хотите указатель на ваш экземпляр мира, вы должны написать вместо этого:

def create_world():
    return _create()
...