Ruby Fiddle: вложенное объединение структур в структуре
Я видел, как этот вопрос задавался несколько раз на этом и других сайтах, но мне еще не приходилось видеть правдивый и фактический ответ, кроме публикации ссылок на документы 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
и используя двоичные двоичные объекты, но сейчас я пытаюсь сделать это с помощью Fiddle, и я очень разочарован.
РЕДАКТИРОВАТЬ: мне удалось найти некоторый успех, вычислив смещение и прочитав память напрямую, и приведя указатель к нужному типу, но я все равно хотел бы знать, есть ли способ сделать этот очиститель с вложенной структурой, вместо о "хакерском" способе, которым я выполняю это.