我已经开始考虑将V8用于我的C ++项目,并且我很难理解如何将数据从C ++应用程序传递到V8引擎并返回。
[下面是一些伪代码,我希望能够在JS中定义一个称为doPocess
的全局函数,该函数进行一些处理,只有C ++应用才能读取:
function doProcess(input, output){
for (var i in input){
var byte = input[i]
output.push(byte)
}
}
为了传递数据数组并捕获输出结果,C ++代码会是什么样?
您不能直接向JavaScript公开C ++数组(例如int[]
)。相反,您具有(至少)以下选项:
(1)您可以分配一个JavaScript数组(请参见Array
中的v8.h类),复制数据(将每个元素适当地转换为JS值),然后将该数组作为参数传递给JavaScript功能。由于复制,这将使数组创建有些昂贵。
(2)可以定义一个带有索引拦截器和“嵌入式字段”的对象,将C ++数组存储在embedder字段中,并根据需要使用索引拦截器来检索元素。由于拦截器,这将使数组元素的访问成本较高。
((3)对于纯数字数据,可以使用TypedArray,它使您可以选择在C ++和JavaScript之间共享后备存储。
您可以通过从全局对象读取(按名称)JavaScript函数本身。对于输出,将应用相同的选项(为(1)反向复印)。
请务必签出documentation和官方samples。