###
7 基本データ型

class `_SimpleCData`
  この非公開クラスはすべての基本ctypesデータ型のベースクラスです。 ここでこのクラスに触れたのは、基本ctypesデータ型の共通属性を含んでいるからです。 `_SimpleCData`は`_CData`のサブクラスですので、 そのメソッドと属性を継承しています。

インスタンスはただ一つの属性を持ちます:

`value`
  この属性にはインスタンスの実際の値が入っています。それは 整数とポインタ型に対しては整数、文字型に対しては 一文字だけの文字列、文字ポインタ型に対しては Python文字列またはユニコード文字列です。

  `value`属性をctypesインスタンスから取り出したとき、 たいていは新しいオブジェクトがその都度返されます。`ctypes`は 元のオブジェクトを戻すことはしません。常に新しいオブジェクトが 作られます。同じことはすべての他のctypesオブジェクトインスタンスに 対しても当てはまります。

基本データ型は、外部関数呼び出しの結果として返されたときや、 例えば構造体のフィールドメンバーや配列要素を取り出すときに、 ネイティブのPython型へ透過的に変換されます。言い換えると、 外部関数が`c_char_p`の`restype`を持つ場合は、 `c_char_p`インスタンスではなく常にPython文字列を 受け取ることでしょう。

基本データ型のサブクラスはこの振る舞いを継承しません。 したがって、外部関数の`restype`が`c_void_p`の サブクラスならば、関数呼び出しからこのサブクラスのインスタンスを 受け取ります。もちろん、`value`属性にアクセスしてポインタの値を 得ることができます。

これらが基本データ型です:

class `c_byte`
  Cのsigned charデータ型を表し、小整数として値を解釈します。 コンストラクタはオプションの整数初期化子を受け取ります。 オーバーフローのチェックは行われません。

class `c_char`
  C charデータ型を表し、単一の文字として値を解釈します。 コンストラクタはオプションの文字列初期化子を受け取り、 その文字列の長さちょうど一文字である必要があります。

class `c_char_p`
  C char *データ型を表し、ゼロ終端文字列へのポインタで なければなりません。コンストラクタは整数のアドレスもしくは 文字列を受け取ります。

class `c_double`
  C doubleデータ型を表します。コンストラクタはオプションの 浮動小数点数初期化子を受け取ります。

class `c_float`
  C floatデータ型を表します。コンストラクタはオプションの 浮動小数点数初期化子を受け取ります。

class `c_int`
  C signed intデータ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。 `sizeof(int) == sizeof(long)`であるプラットホームでは、 `c_long`の別名です。

class `c_int8`
  C 8-bit `signed int`データ型を表します。たいていは、 `c_byte`の別名です。

class `c_int16`
  C 16-bit signed intデータ型を表します。たいていは、 `c_short`の別名です。

class `c_int32`
  C 32-bit signed intデータ型を表します。たいていは、 `c_int`の別名です。

class `c_int64`
  C 64-bit `signed int`データ型を表します。たいていは、 `c_longlong`の別名です。

class `c_long`
  C `signed long`データ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class `c_longlong`
  C `signed long long`データ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class `c_short`
  C `signed short`データ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class `c_size_t`
  C `size_t`データ型を表します。

class `c_ubyte`
  C `unsigned char`データ型を表します。その値は小整数として 解釈されます。コンストラクタはオプションの整数初期化子を 受け取ります。オーバーフローのチェックは行われません。

class `c_uint`
  C `unsigned int`データ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。 `sizeof(int) == sizeof(long)`であるプラットホームでは、 `c_ulong`の別名です。

class `c_uint8`
  C 8-bit unsigned intデータ型を表します。たいていは、 `c_ubyte`の別名です。

class `c_uint16`
  C 16-bit unsigned intデータ型を表します。たいていは、 `c_ushort`の別名です。

class `c_uint32`
  C 32-bit unsigned intデータ型を表します。たいていは、 `c_uint`の別名です。

class `c_uint64`
  C 64-bit unsigned intデータ型を表します。たいていは、 `c_ulonglong`の別名です。

class `c_ulong`
  C `unsigned long`データ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class `c_ulonglong`
  C `unsigned long long`データ型を表します。コンストラクタは オプションの整数初期化子を受け取ります。オーバーフローのチェックは 行われません。

class `c_ushort`
  C `unsigned short`データ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class `c_void_p`
  C `void *`データ型を表します。値は整数として表されます。 コンストラクタはオプションの整数初期化子を受け取ります。

class `c_wchar`
  C `wchar_t`データ型を表し、値はユニコード文字列の 単一の文字として解釈されます。コンストラクタはオプションの 文字列初期化子を受け取り、その文字列の長さはちょうど 一文字である必要があります。

class `c_wchar_p`
  C `wchar_t *`データ型を表し、ゼロ終端ワイド文字列への ポインタでなければなりません。コンストラクタは整数のアドレス もしくは文字列を受け取ります。

class `c_bool`
  C `bool`データ型(より正確には、C99の_Bool)を表します。 その値はTrueまたはFalseであり、コンストラクタは どんなオブジェクト(真値を持ちます)でも受け取ります。 バージョン 2.6 で 新たに追加 された仕様です。

class `HRESULT`
  Windows用: `HRESULT`値を表し、関数またはメソッド呼び出しに対する 成功またはエラーの情報を含んでいます。

class `py_object`
  C `PyObject *`データ型を表します。引数なしでこれを呼び出すと `NULL` `PyObject *`ポインタを作成します。

`ctypes.wintypes`モジュールは他のWindows固有のデータ型を提供します。 例えば、`HWND`、`WPARAM`または`DWORD`です。 `MSG`や`RECT`のような有用な構造体も定義されています。