gpt4 book ai didi

c++ - v8 FunctionTemplate::GetFunction() 因访问冲突而崩溃

转载 作者:行者123 更新时间:2023-11-28 04:29:06 29 4
gpt4 key购买 nike

我有一个非常简单的初始化 v8 的方法,我无法追踪原因(其他 v8 的东西工作得很好):

void JavascriptEngine::init() {
m_platform = v8::platform::NewDefaultPlatform();

v8::V8::InitializeExternalStartupData(".");

v8::V8::InitializeICU();
v8::V8::InitializePlatform(&*m_platform);
v8::V8::Initialize();

v8::Isolate::CreateParams create_params;
create_params.array_buffer_allocator =
v8::ArrayBuffer::Allocator::NewDefaultAllocator();
m_isolate = v8::Isolate::New(create_params);

v8::Isolate::Scope isolate_scope(m_isolate);
v8::HandleScope handle_scope(m_isolate);

m_context = make_unique<v8::Persistent<v8::Context>>(m_isolate,
create_new_context());

v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(m_isolate);
t->SetClassName(v8::String::NewFromUtf8(m_isolate, "Test", v8::NewStringType::kNormal).ToLocalChecked());
t->Set(m_isolate, "func_property", v8::Number::New(m_isolate, 1));

auto f = t->GetFunction(); // CRASH

...//rest of the code
}

我得到的错误:

Exception thrown: read access violation.
**this** was nullptr.

使用 Visual Studio 2017。我错过了什么?

最佳答案

GetFunction,您需要有Context 并输入它。根据您使用的 v8 版本,有些方法需要显式传递 IsolateContext。一般来说,这就是 v8 内部移动的方向 - 将 IsolateContext 传递给需要它的方法(尽管可能存在一些不一致)。

关于c++ - v8 FunctionTemplate::GetFunction() 因访问冲突而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53421030/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com