v8 FunctionTemplate :: GetFunction () аварийно завершает работу с нарушением прав доступа - PullRequest
0 голосов
/ 22 ноября 2018

У меня действительно простой метод, который инициализирует 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. Чего мне не хватает?

1 Ответ

0 голосов
/ 22 ноября 2018

К GetFunction необходимо ввести Context и ввести его.Зависит от того, какую версию v8 вы используете, существуют методы, которые требуют явной передачи Isolate и Context.В общем, это то, что v8 внутренне перемещает - для передачи Isolate и Context в методы, которые требуют этого (хотя может быть некоторая несогласованность).

...