Отображение основных псевдонимов typedef с ctypes? - PullRequest
4 голосов
/ 06 июня 2011

Я понимаю, как определять структуры в Python с помощью ctypes, но я не могу найти никакой документации о том, как обрабатывать основные псевдонимы. Например, 64-разрядные целые числа в SQLite :

#ifdef SQLITE_INT64_TYPE
  typedef SQLITE_INT64_TYPE sqlite_int64;
  typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
#elif defined(_MSC_VER) || defined(__BORLANDC__)
  typedef __int64 sqlite_int64;
  typedef unsigned __int64 sqlite_uint64;
#else
  typedef long long int sqlite_int64;
  typedef unsigned long long int sqlite_uint64;
#endif
typedef sqlite_int64 sqlite3_int64;
typedef sqlite_uint64 sqlite3_uint64;

В зависимости от параметров сборки базовый тип может быть разным. В этом случае, я думаю, я могу предположить, что типом является c_longlong, но является ли это правильным способом справиться с этой ситуацией?

1 Ответ

3 голосов
/ 06 июня 2011

Хотя это, конечно, не «правильный» способ справиться с этим, за исключением использования C API вместо ctypes, это единственное решение. Ко времени выполнения ctypes информация typedef была удалена - она ​​не отображается в виде символов в скомпилированной библиотеке.

...