###
5 ユーティリティ関数

`addressof`( | obj)

  メモリバッファのアドレスを示す整数を返します。`obj`は ctypes型のインスタンスでなければなりません。

`alignment`( | obj_or_type)

  ctypes型のアライメントの必要条件を返します。 `obj_or_type`はctypes型またはインスタンスでなければなりません。

`byref`( | obj)

  `obj`(ctypes型のインスタンスでなければならない)への軽量ポインタを返します。 返されるオブジェクトは外部関数呼び出しのパラメータとしてのみ使用できます。 `pointer(obj)`と似たふるまいをしますが、作成が非常に速く行えます。

`cast`( | obj, type)

  この関数はCのキャスト演算子に似ています。`obj`と同じメモリブロックを 指している`type`の新しいインスタンスを返します。 `type`はポインタ型でなければならず、`obj`は ポインタとして解釈できるオブジェクトでなければならない。

`create_string_buffer`( | init_or_size[, size])

  この関数は変更可能な文字バッファを作成します。返されるオブジェクトは `c_char`のctypes配列です。

  `init_or_size`は配列のサイズを指定する整数もしくは 配列要素を初期化するために使われる文字列である必要があります。

  第一引数として文字列が指定された場合は、バッファが文字列の長さより一要素分大きく 作られます。配列の最後の要素がNUL終端文字であるためです。 文字列の長さを使うべきでない場合は、配列のサイズを指定するために 整数を第二引数として渡すことができます。

  第一引数がユニコード文字列ならば、ctypes変換規則にしたがい 8ビット文字列へ変換されます。

`create_unicode_buffer`( | init_or_size[, size])

  この関数は変更可能なユニコード文字バッファを作成します。 返されるオブジェクトは`c_wchar`のctypes配列です。

  `init_or_size`は配列のサイズを指定する整数もしくは 配列要素を初期化するために使われるユニコード文字列です。

  第一引数としてユニコード文字列が指定された場合は、バッファが文字列の長さより 一要素分大きく作られます。配列の最後の要素がNUL終端文字であるためです。 文字列の長さを使うべきでない場合は、配列のサイズを指定するために 整数を第二引数として渡すことができます。

  第一引数が8ビット文字列ならば、ctypes変換規則にしたがい ユニコード文字列へ変換されます。

`DllCanUnloadNow`( | )

  Windows用: この関数はctypesをつかってインプロセスCOMサーバーを 実装できるようにするためのフックです。_ctypes拡張dllが エクスポートしているDllCanUnloadNow関数から呼び出されます。

`DllGetClassObject`( | )

  Windows用: この関数はctypesをつかってインプロセスCOMサーバーを 実装できるようにするためのフックです。`_ctypes`拡張dllが エクスポートしているDllGetClassObject関数から呼び出されます。

`FormatError`( | [code])

  Windows用: エラーコードの説明文を返す。エラーコードが指定されない場合は、 Windows api関数GetLastErrorを呼び出して、もっとも新しいエラーコードが 使われます。

`GetLastError`( | )

  Windows用: 呼び出し側のスレッド内でWindowsによって設定された 最新のエラーコードを返します。

`memmove`( | dst, src, count)

  標準Cのmemmoveライブラリ関数と同じもの: countバイトを `src`からdstへコピーします。dstと`src`は ポインタへ変換可能な整数またはctypesインスタンスでなければなりません。

`memset`( | dst, c, count)

  標準Cのmemsetライブラリ関数と同じもの: アドレスdstの メモリブロックを値cをcountバイト分書き込みます。 dstはアドレスを指定する整数またはctypesインスタンスである 必要があります。

`POINTER`( | type)

  このファクトリ関数は新しいctypesポインタ型を作成して返します。 ポインタ型はキャッシュされ、内部で再利用されます。したがって、この関数を 繰り返し呼び出してもコストは小さいです。型はctypes型でなければなりません。

`pointer`( | obj)

  この関数は`obj`を指す新しいポインタインスタンスを作成します。 戻り値はPOINTER(type(obj))型のオブジェクトです。

  注意: 外部関数呼び出しへオブジェクトへのポインタを渡したいだけなら、 はるかに高速な`byref(obj)`を使うべきです。

`resize`( | obj, size)

  この関数はobjの内部メモリバッファのサイズを変更します。 objはctypes型のインスタンスでなければなりません。 バッファをsizeof(type(obj))で与えられるオブジェクト型の 本来のサイズより小さくすることはできませんが、バッファを 拡大することはできます。

`set_conversion_mode`( | encoding, errors)

  この関数は8ビット文字列とユニコード文字列の間で変換するときに 使われる規則を設定します。encodingは`'utf-8'`や`'mbcs'`のような エンコーディングを指定する文字列でなければなりません。 errorsはエンコーディング/デコーディングエラーについての エラー処理を指定する文字列でなければなりません。 指定可能な値の例としては、`"strict"`、`"replace"`または `"ignore"`があります。

  `set_conversion_mode`は以前の変換規則を含む2要素タプルです。 windowsでは初期の変換規則は`('mbcs', 'ignore')`であり、 他のシステムでは`('ascii', 'strict')`です。

`sizeof`( | obj_or_type)

  ctypes型もしくはインスタンスのメモリバッファのサイズをバイト単位で 返します。Cの`sizeof()`関数と同じ動作です。

`string_at`( | address[, size])

  この関数はメモりアドレスaddressから始まる文字列を返します。 sizeが指定された場合はサイズとして使われます。指定されなければ、 文字列がゼロ終端されていると仮定します。

`WinError`( | code=None, descr=None)

  Windows用: この関数はctypesの中でもおそらく最悪な名前がつけれたものです。 WindowsErrorのインスタンスを作成します。codeが指定されないならば、 エラーコードを決めるために`GetLastError`が呼び出されます。 `descr`が指定されないならば、`FormatError`が エラーの説明文を得るために呼び出されます。

`wstring_at`( | address)

  この関数はユニコード文字列としてメモリアドレス`address`から始まる ワイドキャラクタ文字列を返します。`size`が指定されたならば、 文字列の文字数として使われます。指定されなければ、 文字列がゼロ終端されていると仮定します。