为什么V8在类中封装时会崩溃
Why is V8 crashing when wrapped in class
我正试图将V8封装在一个类结构中,其中存在一个向C++代码公开JavaScript回调的对象,该对象应该进行一些数据处理。
这个想法是让上下文和handle_scope对所有参与的类都可用,也就是说,我想到了一个"全局"状态。我把它归结为以下例子:
using namespace v8;
Persistent<Context> context;
HandleScope handle_scope;
struct CallBackTest {
HandleScope handle_scope;
Handle<v8::Function> function;
void RegisterCallback(Handle<v8::Function> f) {
function = f;
}
bool MakeCall(int argc, Handle<Value> args[2]) {
Handle<Value> js_result = function->Call(context->Global(), argc, args);
String::AsciiValue ascii(js_result);
return atoi(*ascii);
}
};
struct V8Wrapper {
CallBackTest tester;
V8Wrapper() {
context = Context::New();
Context::Scope context_scope(context);
Handle<String> source;
Handle<Script> script;
Handle<Value> result;
source = String::New("function test_function() { return (arguments[0] == arguments[1]); };");
script = Script::Compile(source);
result = script->Run();
Handle<v8::Value> value1 = context->Global()->Get(String::New("test_function"));
if(!value1->IsFunction()) {
std::cout << "function not found" << std::endl;
} else {
Handle<v8::Function> func1 = v8::Handle<v8::Function>::Cast(value1);
tester.RegisterCallback(func1);
}
}
};
int main(int argc, char* argv[]) {
V8Wrapper wrap;
Handle<Value> args[2];
Handle<Value> js_result;
int final_result;
args[0] = v8::String::New("1");
args[1] = v8::String::New("1");
final_result = wrap.tester.MakeCall(2, args);
if(final_result == 1) {
std::cout << "Matchedn";
} else {
std::cout << "NOT Matchedn";
}
}
谢谢。
我认为您的问题是对HandleScope的误解。Handle必须在定义了HandleScope的范围内"活动"。HandleScope的思想不是必须在某个全局位置定义的全局结构,而是对应于类似堆栈的概念。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 当从成员类调用封装的std::begin时,程序崩溃
- 为什么V8在类中封装时会崩溃
- 向c#封装的c++ dll发送值会导致Unity崩溃