我已经在这个网站和其他网站上看到过这个问题被问过几次,除了发布到也没有回答这个问题的 Ruby 文档的链接之外,还没有看到一个合法和实际的答案。
是否有可能,如果可以,如何使用 Ruby Fiddle 在另一个结构中建立一个结构联合?文档中的所有内容都只是说明了如何使用原始类型创建结构/联合,而不是如何嵌套它们,这是一种常见的约定。
Fiddle::CParser
除了原始类型以及使用签名的手动创建之外,它无法解析任何内容。
我试图简单地使用TYPE_VOIDP
并使用该指针作为地址创建结构的位置,我相当确定它应该可以工作,但我只得到垃圾,好像地址不正确一样。我想这是因为没有分配足够的内存,但是由于联合中的结构大小不同,我无法提前分配它,导致我陷入困境。
基本格式是这样的:(这是伪代码只是为了给出想法)
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”方式。