使用ctypes映射基本typedef别名?
我知道如何在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
运行时,类型定义的信息已经被去掉了——在编译后的库里看不到这些符号。