下面写个程序,用来演示在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; }
时间: 2024-11-05 22:47:23