js-ctypes из объектов javascript

Я работаю над расширением Firefox, которое получает бинарные изображения как ArrayBuffers из uint8_t.

В моем расширении я загружаю файл .dll с функцией, которую мне нужно использовать для этого полученного изображения. Функция принимает параметр ctype.uint8_t.ptr и возвращает значение ctype.uint8_t.ptr.

Кажется, я не могу найти способ преобразования ArrayBuffer в этот конкретный ctype, чтобы я мог передать его функции. Есть ли правильный способ сделать это?

Использование ImplicitConvert() приводит к ошибке: аргумент должен быть неотрицательным целым числом.


person Sebastian-Laurenţiu Plesciuc    schedule 15.10.2013    source источник


Ответы (1)


Вы должны быть в состоянии сделать только:

var a = new Uint8Array(1<<10);
var ptr = new ctypes.uint8_t.ptr(a.buffer);

Материал не задокументирован, похоже, но есть некоторые тесты, демонстрирующие это.

person nmaier    schedule 15.10.2013
comment
Может работать, но я получаю следующую ошибку: TypeError: ожидаемый указатель типа, получен (void 0) - person Sebastian-Laurenţiu Plesciuc; 16.10.2013
comment
Я предполагаю, что каким-то образом я получаю неверные данные в a.buffer. Есть ли способ лечить это? В соответствии с атрибутом длины нового Uint8Array, который я создаю, длина равна 19. - person Sebastian-Laurenţiu Plesciuc; 16.10.2013
comment
Оно работает. Спасибо за ваш ответ. Но мне все еще интересно, как проверить массив, прежде чем пытаться указать на него. Я могу использовать блоки try и catch, но знание заранее может быть более эффективным. - person Sebastian-Laurenţiu Plesciuc; 16.10.2013
comment
Я ничего не знаю о вашем коде и поэтому не могу воспроизвести вашу проблему, поэтому не буду здесь строить предположения. ;) - person nmaier; 16.10.2013
comment
Привет, @Sebastian-LaurenţiuPlesciuc и nmair, ссылка на некоторые тесты не работает, мне было интересно, работает ли этот метод сегодня и где эти тестовые примеры. Это действительно очень круто! - person Noitidart; 01.08.2015
comment
@Noitidart Привет! Вот рабочая ссылка на тесты: github.com/krad-radio/mozilla-krad/blob/master/toolkit/ - person Sebastian-Laurenţiu Plesciuc; 01.08.2015
comment
Большое спасибо @Sebastian-LaurenţiuPlesciuc! :) - person Noitidart; 01.08.2015