使用ctypes映射基本typedef别名?

4 投票
1 回答
1324 浏览
提问于 2025-04-16 19:01

我知道如何在Python中使用ctypes定义结构体,但我找不到关于如何处理基本别名的文档。例如,SQLite中的64位整数

#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

虽然这绝对不是处理这个问题的“正确”方法,但如果不想用C语言的API,而是用ctypes,那这就是唯一的解决办法。等到ctypes运行时,类型定义的信息已经被去掉了——在编译后的库里看不到这些符号。

撰写回答