Я не буду размещать ни одного code
, но что не может быть сделано здесь, в этих ответах должно быть положить рифму по соображениям. Я работаю на родной арене JS, и возникла проблема, что некоторые native API calls
нужно преобразовать, потому что мы не можем писать параметры без уродливых позорных хаков.
Это мое решение:
// Functions that return parameter data should be modified to return
// an array whose zeroeth member is the return value, all other values
// are their respective 1-based parameter index.
That doesn't mean define and return every parameter. Only the parameters that recieve output.
Причина такого подхода заключается в том, таким образом: Multiple return values
может понадобиться для любого количества процедур. Это создает ситуацию, когда объекты с именованными значениями (которые в конечном счете не будут синхронизироваться с лексическим контекстом всех операций), постоянно необходимо запомнить, чтобы надлежащим образом работать с процедурами (процедурами).
Использование метода, предписанного, вы должны знать только what you called
и where you should be looking
, а не того, чтобы знать, что вы ищете.
Существует также преимущество, заключающееся в том, что «прочный и глупый». Алограммы можно записать, чтобы обернуть вокруг желаемых вызовов процедур, чтобы сделать эту операцию «более прозрачной».
Было бы целесообразно использовать object
, function
, или array
(все из которых являются объектами) в качестве параметра «записи бэк-выход», но я считаю, что если какой-либо постороннее работа должна быть сделана, она должна сделать то, что вы пишете инструментарий, чтобы упростить работу или расширить функциональность.
Это ответ на любой ответ за каждую случайность, которая держит APIs
, смотря так, как должно выглядеть сначала, а не появляться, и иметь все сходство из-за того, что копченое плетение шпагата-ковра гобелена, который не может понять если это определение или данные.
Поздравляем, и удачи.
Я использую webkitgtk3 и подключаю некоторые собственные C-библиотеки proc. поэтому этот проверенный образец кода может, по крайней мере, служить цели иллюстрации.
// ssize_t read(int filedes, void *buf, size_t nbyte)
SeedValue libc_native_io_read (SeedContext ctx, SeedObject function, SeedObject this_object, gsize argument_count, const SeedValue arguments[], SeedException *exception) {
// NOTE: caller is completely responsible for buffering!
/* C CODING LOOK AND FEEL */
if (argument_count != 3) {
seed_make_exception (ctx, exception, xXx_native_params_invalid,
"read expects 3 arguments: filedes, buffer, nbyte: see `man 3 read' for details",
argument_count
); return seed_make_undefined (ctx);
}
gint filedes = seed_value_to_int(ctx, arguments[0], exception);
void *buf = seed_value_to_string(ctx, arguments[1], exception);
size_t nbyte = seed_value_to_ulong(ctx, arguments[2], exception);
SeedValue result[3];
result[0] = seed_value_from_long(ctx, read(filedes, buf, nbyte), exception);
result[2] = seed_value_from_binary_string(ctx, buf, nbyte, exception);
g_free(buf);
return seed_make_array(ctx, result, 3, exception);
}
Ника, я знаю, что это было давно, но я думаю, что у меня наконец есть [ответ] (https://stackoverflow.com/a/48517986/1016343) для вас. Да, вы можете выполнить параметры в JavaScript. – Matt