假设我有一个C API,如下所示:
void get_result_buffer(context* ctx, void** result, size_t* result_size);
在哪里?
context
是某种任意不透明的上下文类型保持状态。这种说法的目的是
context* ctx = ...;
do_something_with_context(ctx, ...);
void* result_buffer = 0;
size_t result_buffer_size = 0;
get_result_buffer(ctx, &result_buffer, &result_buffer_size);
/* Now result_buffer and result_buffer_size are meaningful and populated with the results of having called `do_something_with_context`. */
这个
result_buffer
属于
上下文
对象,因此调用方不需要释放它。现在我想打电话
get_result_buffer
来自Emscripten。我可以很容易地设置
cwrap
为此,它看起来像:
wrap_get_result_buffer = something.cwrap(
'get_result_buffer',
null,
['number', 'number', 'number']
)
但我不清楚如何设置,以便在JS中使用out参数。理想情况下,在最后,我会有一个看起来像字节缓冲区的东西,其中包含
result
out参数,长度如
result_size
out参数。
似乎我传入的值需要以某种方式进行分配,然后我将作为
number
类型参数,但我不知道如何在JS/Emscripten层中执行此操作。同样,在调用之后,我希望这些值现在已经被发出的C代码更新了,但是我不清楚如何将现在填充的数据提取到某种JS字节数组中。
关于如何执行此操作或指向示例代码的指针有任何指导吗?