ctypes c中的结构赋值实现

时间:2015-05-13 10:48:22

标签: python c pointers struct ctypes

我继承了一些我用来使用ctypes转换为Python代码的C代码。我遇到了一条C线,我遇到了麻烦:

int __stdcall Callback(const CoreSystem* pCoreSys) {
    UserDataStruct* pUserData = (UserDataStruct*) pCoreSys->UserData;
    ++pAppUserData->MessageCount;
    return 0;
}

这是回调函数中的赋值。我正在读这个:

"设置一个局部变量pUserData,它是指向UserDataStruct类型结构的指针(或者这是一个局部变量,它是 type 指针struct?)到pCoreSys->UserData作为指向UserDataStruct"的指针。请注意,pCoreSys->UserDataint。另请注意,我很可能对指针的解释不正确,并欢迎精明的读者善意地纠正我。

第二行然后递增MessageCount的{​​{1}}属性(?)。

这是struct

UserDataStruct

这是typedef struct { int UserParms; int ErrorCode; __int64 MessageCount; unsigned char IsOSI; unsigned char IsCoreRunning; char RunStatus; int NumInChain; } UserDataStruct;

CoreSystem

这个回调函数可能运行数百万次,所以我假设指针允许基本上保持状态的能力。

我在Python中实现struct CoreSystem { int UserData; int DLLVersion; int ClockUpdateInterval; int Status; int StatusData; const char* StatusDisplay; const char* TapeDisplay; void* Module; void* ThreadInstance; };

struct(ure)

我已尝试以下方法来实施分配线:

class UserDataStruct(Structure):
    _fields_ = [
        ('UserParams', c_int),
        ('ErrorCode', c_int),
        ('MessageCount', c_longlong),
        ('IsOSI', c_ubyte),
        ('IsCoreRunning', c_ubyte),
        ('RunStatus', c_char),
        ('NumInChain', c_int)]

此操作和user_data = cast(pCoreSys.contents.UserData, POINTER(UserDataStruct)) 包含user_data._type_列表中的元素,但我似乎无法访问它们或递增它们。我意识到我可能必须初始化结构但是在每次调用回调函数时,它将重新初始化而丢失设置值(?)。此外,C实现似乎也没有初始化结构。

问题:

  1. 我是否正确解释了C的赋值行?
  2. 如何使用ctypes在Python中复制?
  3. 我如何操作Python ctypes实现中的值(递增,递减等)?
  4. 为什么(以及如何)C dev将struct类型的变量设置为整数?

0 个答案:

没有答案