我已经在这个网站和其他网站上看到过几次这个问题,并且除了发布不能回答这个问题的Ruby文档的链接之外,还没有看到合法和实际的答案。
是否有可能,如果是这样,如何使用Ruby Fiddle在另一个结构中建立结构联合?文档中的所有内容都只是指示如何使用基本类型创建结构/联合,而不是如何嵌套它们,这是常见的惯例。
Fiddle::CParser
无法解析除基本类型以外的任何内容,也无法使用签名手动创建。
我试图简单地使用TYPE_VOIDP
并使用该指针作为地址的位置创建结构,我相当确定应该工作,但我只得到垃圾,好像地址不正确。我想这是因为没有足够的内存分配,但我因为联盟中的结构是不同的大小,我不能提前分配它,引导我圈。
基本格式是这样的:(这是psuedo-code只是为了给出想法)
struct1 = [float, float, float, int]
struct2 = [int, int]
struct3 = [float, enum, enum, float, double, float]
structMaster = [
int, // Determines the type of the within the union
char[16],
char[16],
union[struct1, struct2, struct3]
]
我已经广泛查看了所有Fiddle文档,它从未表明这是否可能。我熟悉Fiddle::CStructBuilder
及相关课程,并且发布指向它的链接不是答案,正如我在其他帖子中看到的那样提出类似的问题。
我已成功完成此操作,使用旧版Win32API
完成此操作并使用二进制blob,但我现在正试图用Fiddle完成此操作,并让我非常沮丧。
修改 我确实通过计算偏移量并直接读取内存并将指针转换为正确的类型来找到一些成功,但我仍然想知道是否有一种方法可以使用嵌套结构来更清洁,而不是"的hackish"我正在完成它。