3
我有以下的代码几乎工件上用C++写:C++范围和谷歌的V8脚本上下文
[..]
Handle<Object> jsGlobal;
Handle<Function> jsUpdateFunc;
void setupJs() {
V8::Initialize();
Isolate* isolate = v8::Isolate::New();
Isolate::Scope isolate_scope(isolate);
HandleScope handle_scope(isolate);
Local<Context> context = Context::New(isolate);
Context::Scope context_scope(context);
Local<String> source = String::NewFromUtf8(isolate, "var a = 0; function test() { a++; return a.toString(); }");
Local<Script> script = Script::Compile(source);
script->Run();
jsGlobal = context->Global();
Handle<Value> value = jsGlobal->Get(String::NewFromUtf8(isolate, "test"));
jsUpdateFunc = Handle<Function>::Cast(value);
}
void callJs() {
Handle<Value> args[0];
Handle<Value> js_result = jsUpdateFunc->Call(jsGlobal, 0, args);
js_result->ToString();
String::Utf8Value utf8(js_result);
printf("%s\n", *utf8);
}
[..]
我具备的功能setupJs()设置的V8环境和callJs应该被称为多次(工作时,javascript脚本每次递增var a)。
如果我在setupJs把
Handle<Value> args[0];
Handle<Value> js_result = jsUpdateFunc->Call(jsGlobal, 0, args);
js_result->ToString();
String::Utf8Value utf8(js_result);
printf("%s\n", *utf8);
,我可以看到函数S怎么叫,并打印 “1”。但是,如果我离开这个函数调用withing不同的功能稍后调用,我有一个段错误在该行Handle<Value> js_result = jsUpdateFunc->Call(jsGlobal, 0, args);
我检查了两者jsUpdateFunc和jsGlobal不是空指针