下面写个程序,用来演示在C++中通过V8调用js函数
int js_load_data(char *buf) {
//声明v8虚拟机
Isolate* isolate;
//进入v8虚拟机内部,初始化v8运行环境
Isolate::Scope isolate_scope(isolate);
//创建句柄集合
HandleScope handle_scope(isolate);
//创建v8运行上下文
Local<ObjectTemplate> global = ObjectTemplate::New(isolate);
Local<Context> context = Context::New(isolate, NULL, global);
Context::Scope context_scope(context);
//获取js函数
Local<String> func_name = String::NewFromUtf8(isolate, "load_data", NewStringType::kNormal).ToLocalChecked();
Local<Value> func_value;
if (!context->Global()->Get(context, func_name).ToLocal(&func_value) || !func_value->IsFunction()) {
return -1;
}
//转换成js函数对象
Local<Function> js_func = Local<Function>::Cast(func_value);
//调用处理函数
TryCatch try_catch(isolate);
const int argc = 1;
Local<Value> argv[argc] = {buf};
Local<Value> result;
if (!js_func->Call(context, context->Global(), argc, argv).ToLocal(&result)) {
String::Utf8Value error(try_catch.Exception());
printf("js_load_data error, : %s", *error);
return -1;
}
return 0;
}