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, и я очень разочарован.

РЕДАКТИРОВАТЬ: мне удалось найти некоторый успех, вычислив смещение и прочитав память напрямую, и приведя указатель к нужному типу, но я все равно хотел бы знать, есть ли способ сделать этот очиститель с вложенной структурой, вместо о "хакерском" способе, которым я выполняю это.

0 ответов

Другие вопросы по тегам