从Union类中获取数据会使Python崩溃

从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

我已经用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.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