2015-10-02 3 views
3

Я пытаюсь создать оболочку Ruby для динамической * .so библиотеки, которая занимается обработкой изображений. Одна из функций convert_x_to_z имеет пользовательский входной параметр typedef. Как я могу передать в векторе A объектов, если я нанес на карту A-структуруКак обернуть std :: вектор настраиваемой структуры с помощью ffi?

typedef struct image { 
    uint16_t image_width; 
    uint16_t image_height; 
    uint16_t image_depth; 
    uint8_t* data; 
} A; 

в FFI:Structure как это

class A < FFI::Struct 
    layout :image_width , :int, 
      :image_height, :int, 
      :image_depth, :int, 
      :data, :pointer 
    end 

Пусть у меня есть переменная single который является экземпляром класса А. Как могу ли я обернуть это в массив класса B, который будет представлять вектор/массив классов A и передать его как параметр const B &x функции int32_t convert_x_to_z?

int32_t convert_x_to_z(
    const B &x, 
    uint32_t &t, 
    uint8_t* z); 

Это B вектор или массив структура из A класса.

typedef std::vector<A> B; 

ответ

1

Вы должны сделать это таким образом:

int32_t convert_x_to_z_aux(const A &a, uint32_t &t, uint8_t* z) { 
    std::vector<A> b(1, a); // create a vector with 1 element 
    return convert_x_to_z(b, t, z); 
} 
+0

Спасибо. У меня нет доступа к коду C++, это скомпилированная динамическая библиотека, к которой у меня нет исходных файлов. Так что это не будет работать. Мне нужно сделать это на уровне Ruby. – adamliesko

+0

@adamliesko, Просто создайте свою собственную библиотеку поверх старой. – vershov

+0

Спасибо за это. Не могли бы вы указать мне какой-то путеводитель/учебник, как я мог это сделать? Разве это не http://stackoverflow.com/a/915181/1212336 и препятствие здесь (если у меня нет исходных файлов)? – adamliesko

Смежные вопросы