私はPythonでctypesを使用しています。 これは構造体である:私はスフィアの構造体のためのクラスを宣言し、私はrender
機能にargTypesのを設定する必要がPythonでPythonの構造体へのポインタの配列へのポインタを渡す方法
void render(Sphere** spheres);
:
typedef struct {
float x;
float y;
float z;
float radius;
} Sphere;
そして、私は次のプロトタイプと機能を持っています
lib_render = ctypes.cdll.LoadLibrary('librender.so')
class Sphere(ctypes.Structure):
_fields_ = [('x', ctypes.c_float),
('y', ctypes.c_float),
('z', ctypes.c_float),
('radius', ctypes.c_float)]
render = lib_render.render
render.argtypes = [<cannot find out what needs to be here>]
spheres = numpy.array([Sphere(1, 2.8, 3, 0.5),
Sphere(4.2, 2, 1, 3.2)])
render(spheres)
正しく配列を渡すには?
私はこれをテストしていませんが、私は、 ' – jacob
が、私はそれを試してみましたが、動作しません、それは' ctypes.POINTER(ctypes.POINTER(スフィア))になると仮定したいです。 numpy配列を自動的に 'LP_LP_Sphere'に変換することはできません。また、' spheres.ctypes.data_as(POINTER(POLLER)) '関数に渡すと、関数は不明なガベージを受信します。 – Dimansel
'numpy.ctypeslib.ndpointer'を調べましたか? – jacob