从Union类中获取数据会使Python崩溃
我已经用python包装了一个c库和c API,并调用了必要的DLL。但是,我在访问存储在工会内部的数据时遇到了问题 这是我的包装库的一个示例(为方便起见缩短): 我可以使用此指针检索时间值的位置:从Union类中获取数据会使Python崩溃,python,pointers,structure,union,ctypes,Python,Pointers,Structure,Union,Ctypes,我已经用python包装了一个c库和c API,并调用了必要的DLL。但是,我在访问存储在工会内部的数据时遇到了问题 这是我的包装库的一个示例(为方便起见缩短): 我可以使用此指针检索时间值的位置: (g[0].time) 返回: <ctypes.wintypes.LP_c_float at 0x218f044aec8> <ctypes.wintypes.LP_c_float at 0x218f044a9c8> 7.304020881652832 7.3520212
(g[0].time)
返回:
<ctypes.wintypes.LP_c_float at 0x218f044aec8>
<ctypes.wintypes.LP_c_float at 0x218f044a9c8>
7.304020881652832
7.352021217346191
返回:
<ctypes.wintypes.LP_c_float at 0x218f044aec8>
<ctypes.wintypes.LP_c_float at 0x218f044a9c8>
7.304020881652832
7.352021217346191
但是这使Python崩溃了,但是“崩溃”我的意思是弹出一个框,上面说Python现在已经不能正常工作了
因此,我试图找出问题所在,我发现:
我可以像这样单独打印出所有的时间值
print(g[0].time[0])
print(g[0].time[1]) #.....
返回:
<ctypes.wintypes.LP_c_float at 0x218f044aec8>
<ctypes.wintypes.LP_c_float at 0x218f044a9c8>
7.304020881652832
7.352021217346191
这些值是正确的,因此我尝试了与数据值相同的方法:
print(g[0].data[0].B[1])
这就是我所能做到的,因为python崩溃了
使python崩溃的那一行是一个指针,指向保存我所有数据值的联合中的一个浮点
我的问题是:
我做错了什么?如何在不破坏Python的情况下从这个联合体中获取数据
这是我为Parm和Data编写的C代码:
#define CBASED
#ifdef MAKEDLL
# define DLLEXP __declspec( dllexport )
//# define CBASED
# define CALLCONV
#else
/* using .H file for application */
# define DLLEXP
/* ANSI C program */
# ifdef __STDC__
//# define CBASED
# define CALLCONV
# else
/* C++ program */
//# define CBASED extern "C"
# define CALLCONV _cdecl
# endif
#endif
//union Data
//{
// unsigned char *A; /* generic byte pointer 1 byte */
// float *B; /* generic float pointer 4 byte */
//CBASED DLLEXP struct Parm
//{
// struct File *parent; /* parent file of parameter */
// char *name, /* parameter name */
// union Data data; /* pointers to data buffer */
// float *time; /* time points */
请包括
Parm
和Data
的C定义@eryksun我添加了C代码('Data',指针(Data)
不正确。C定义是union Data
,而不是union Data*
。使用('Data',Data)
。然后使用y=g[0]。Data.B[:1033]
列出浮点数据。不要使用循环。这很慢。谢谢你的帮助。如果你想回答这个问题,我会接受@eryksunply,包括Parm
和数据的C定义。
@eryksun我添加了C代码('data',指针(data))
不正确。C定义是联合数据
,而不是联合数据*
。使用('Data',Data)
。然后使用y=g[0].Data.B[:1033]
列出浮点数据。不要使用循环。速度很慢。谢谢你的帮助。如果你想回答这个问题,我会接受@eryksun