我继承了一些我用来使用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->UserData
是int
。另请注意,我很可能对指针的解释不正确,并欢迎精明的读者善意地纠正我。
第二行然后递增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实现似乎也没有初始化结构。
问题: