3

そのため、使用している C ライブラリの void ポインターによって返される unsigned short 配列を読み込もうとしています。ヘッダーの関数定義は次のようになります。

void* Foo(int a, int b)

この関数は、unsigned short 型の配列へのポインタを返すことになります。

Python では、ctypes を使用して配列を返そうとしましたが、成功しませんでした。ここに私が持っているものがあります:

import ctypes
import numpy as np

libc = ctypes.cdll.LoadLibrary("Library.dll")

Vec=np.zeros((1000,),dtype=np.uint16)

c_ushort_p = ctypes.POINTER(ctypes.c_ushort)
Vec_p=confVec.ctypes.data_as(c_ushort_p)

libc.Foo.restype = ctypes.c_void_p
Vec_p=libc.Foo(1,1)

print Vec_p

これは「なし」を返します。

私が試してみると:

...
libc.Foo.restype = ctypes.c_void_p
Vec_p=libc.Foo(1,1)

print Vec_p[0]

TypeError: 'NoneType' object has no attribute ' getitem ' が発生します

私もこれを試しました:

...
libc.Foo.restype = ctypes.c_void_p
Vec_p=ctypes.cast(libc.Foo(1,1),c_ushort_p)

print Vec_p

ここで、print Vec_p[0] は「ValueError: NULL ポインター アクセス」を返します。

誰でも私に何か助けてもらえますか?

4

1 に答える 1