В вики Emscripten (Взаимодействие с кодом) есть только два типа перечисленные в качестве возможных типов возвращаемых значений для передачи в ccall
или cwrap
("число" и "строка"). Как я могу обернуть/вызвать функцию, которая ничего не возвращает (пустой тип возврата)?
Как обернуть или вызвать функцию C с void в качестве возврата в Emscripten?
Ответы (2)
"null" работает как возвращаемый тип для функций void вместо строки.
Например:
my_fun = Module.cwrap('my_fun', null, ['number', 'number']);
person
Charles Ofria
schedule
26.06.2014
Примеры на сайте также используют number
, так как это будет просто игнорируется. Это то, что использует пример в вики.
Я использую это во всем своем emscript-коде, и он отлично работает. В общем, поиск в папке примеров репозитория emscripten
— лучший выбор для синтаксиса. Кроме того, это задокументированное использование, поэтому может быть безопаснее застраховаться от будущих изменений.
Например, функция C
void test(char* buffer, int buffersize) {
// ...
}
может быть обернут как
var test = Module.cwrap('test', 'number', ['number', 'number']);
person
zzmp
schedule
26.07.2014
Спасибо, что указали мне на каталог примеров! Я не знал, что он существовал раньше.
- person jplatte; 28.07.2014
Что касается всех этих «числовых» элементов: я думаю, что для возвращаемого типа я буду придерживаться null или undefined, вставлять «число» туда просто не имеет смысла. Однако мне любопытен этот первый параметр: зачем вручную выделять пространство с помощью Module._malloc, а затем передавать указатель на функцию-оболочку вместо того, чтобы просто использовать «строку» в качестве типа параметра?
- person jplatte; 28.07.2014
Я не могу дать вам окончательный ответ, но я могу определенно рискнуть предположить: возможно, он был написан до того, как «строка» стала вещью, но, скорее всего, этот пример лучше проверяет его и демонстрирует более общие методы прохождения, так как тесты часто упоминаются (в вики) в качестве примеров.
- person zzmp; 28.07.2014
undefined
является концептуальным эквивалентом. - person The Paramagnetic Croissant   schedule 26.06.2014null
в качестве возвращаемого типа я попробовал то же самое сundefined
, и, похоже, он тоже работает. - person jplatte   schedule 27.06.2014