カプセル¶
using-capsules 以下のオブジェクトを使う方法については 拡張モジュールに C API を提供する を参照してください。
バージョン 3.1 で追加.
-
type PyCapsule¶
この
PyObject
のサブタイプは、任意の値を表し、C拡張モジュールから Pythonコードを経由して他のC言語のコードに任意の値を(void* ポインタの形で)渡す必要があるときに有用です。あるモジュール内で定義されているC言語関数のポインタを、他のモジュールに渡してそこから呼び出せるようにするためによく使われます。これにより、動的にロードされるモジュールの中の C API に通常の import 機構を通してアクセスすることができます。
-
type PyCapsule_Destructor¶
- 次に属します: Stable ABI.
カプセルに対するデストラクタコールバック型. 次のように定義されます:
typedef void (*PyCapsule_Destructor)(PyObject *);
PyCapsule_Destructor コールバックの動作については
PyCapsule_New()
を参照してください。
-
PyObject *PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI.
pointer を格納する
PyCapsule
を作成します。 pointer 引数はNULL
であってはなりません。失敗した場合、例外を設定して
NULL
を返します。name 文字列は
NULL
か、有効なC文字列へのポインタです。NULL
で無い場合、この文字列は少なくともカプセルより長く生存する必要があります。(destructor の中で解放することは許可されています)destructor が
NULL
で無い場合、カプセルが削除されるときにそのカプセルを引数として呼び出されます。このカプセルがモジュールの属性として保存される場合、 name は
modulename.attributename
と指定されるべきです。こうすると、他のモジュールがそのカプセルをPyCapsule_Import()
でインポートすることができます。
-
void *PyCapsule_GetPointer(PyObject *capsule, const char *name)¶
- 次に属します: Stable ABI.
カプセルに保存されている pointer を取り出します。失敗した場合は例外を設定して
NULL
を返します。The name parameter must compare exactly to the name stored in the capsule. If the name stored in the capsule is
NULL
, the name passed in must also beNULL
. Python uses the C functionstrcmp()
to compare capsule names.
-
PyCapsule_Destructor PyCapsule_GetDestructor(PyObject *capsule)¶
- 次に属します: Stable ABI.
カプセルに保存されている現在のデストラクタを返します。失敗した場合、例外を設定して
NULL
を返します。カプセルは
NULL
をデストラクタとして持つことができます。従って、戻り値のNULL
がエラーを指してない可能性があります。PyCapsule_IsValid()
かPyErr_Occurred()
を利用して確認してください。
-
void *PyCapsule_GetContext(PyObject *capsule)¶
- 次に属します: Stable ABI.
カプセルに保存されている現在のコンテキスト(context)を返します。失敗した場合、例外を設定して
NULL
を返します。カプセルは
NULL
をコンテキストとして持つことができます。従って、戻り値のNULL
がエラーを指してない可能性があります。PyCapsule_IsValid()
かPyErr_Occurred()
を利用して確認してください。
-
const char *PyCapsule_GetName(PyObject *capsule)¶
- 次に属します: Stable ABI.
カプセルに保存されている現在の name を返します。失敗した場合、例外を設定して
NULL
を返します。カプセルは
NULL
を name として持つことができます。従って、戻り値のNULL
がエラーを指してない可能性があります。PyCapsule_IsValid()
かPyErr_Occurred()
を利用して確認してください。
-
void *PyCapsule_Import(const char *name, int no_block)¶
- 次に属します: Stable ABI.
Import a pointer to a C object from a capsule attribute in a module. The name parameter should specify the full name to the attribute, as in
module.attribute
. The name stored in the capsule must match this string exactly.成功した場合、カプセルの内部 ポインタ を返します。失敗した場合、例外を設定して
NULL
を返します。バージョン 3.3 で変更: no_block has no effect anymore.
-
int PyCapsule_IsValid(PyObject *capsule, const char *name)¶
- 次に属します: Stable ABI.
capsule が有効なカプセルであるかどうかをチェックします。有効な capsule は、非
NULL
で、PyCapsule_CheckExact()
をパスし、非NULL
なポインタを格納していて、内部の name が引数 name とマッチします。 (name の比較方法についてはPyCapsule_GetPointer()
を参照)In other words, if
PyCapsule_IsValid()
returns a true value, calls to any of the accessors (any function starting withPyCapsule_Get
) are guaranteed to succeed.オブジェクトが有効で name がマッチした場合に非
0
を、それ以外の場合に0
を返します。この関数は絶対に失敗しません。
-
int PyCapsule_SetContext(PyObject *capsule, void *context)¶
- 次に属します: Stable ABI.
capsule 内部のコンテキストポインタを context に設定します。
成功したら
0
を、失敗したら例外を設定して非0
を返します。
-
int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor)¶
- 次に属します: Stable ABI.
capsule 内部のデストラクタを destructor に設定します。
成功したら
0
を、失敗したら例外を設定して非0
を返します。
-
int PyCapsule_SetName(PyObject *capsule, const char *name)¶
- 次に属します: Stable ABI.
capsule 内部の name を name に設定します。name が非
NULL
のとき、それは capsule よりも長い寿命を持つ必要があります。もしすでに capsule に非NULL
の name が保存されていた場合、それに対する解放は行われません。成功したら
0
を、失敗したら例外を設定して非0
を返します。
-
int PyCapsule_SetPointer(PyObject *capsule, void *pointer)¶
- 次に属します: Stable ABI.
capsule 内部のポインタを pointer に設定します。pointer は
NULL
であってはなりません。成功したら
0
を、失敗したら例外を設定して非0
を返します。