我使用v8库的较新版本。当我从this page(process.cc)运行演示时,
我的程序在UnwrapMap函数中调用GetInternalField时崩溃。有没有人遇到类似的问题,或者他们知道如何解决?这里的例子:
map<string, string>* JsHttpRequestProcessor::UnwrapMap(Local<Object> obj) {
Local<External> field = Local<External>::Cast(obj->GetInternalField(0)); // here segmentation fault
void* ptr = field->Value();
return static_cast<map<string, string>*>(ptr);
}
编辑:
我解决了我的问题。我必须插入宏V8_COMPRESS_POINTERS =1。谢谢
提供的示例在这里工作正常;您是否以任何方式对其进行了修改?您的运行情况如何?
仅当您知道obj->GetInternalField(0)
是具有内部字段的对象时,才可以调用obj
。您可以使用obj->InternalFieldCount()
进行检查。如果您(嵌入者)为对象提供了任何内部字段,则这些对象只有内部字段。如果尝试将常规JavaScript对象转换为C ++映射,则必须遍历其属性,而不是其内部字段。