Kito87 Ответов: 0

Какой способ использовать метод доступа в Google V8 В против c ++?


Я использую v8 в программе VC++.

Я использовал shell.cc из примеров файлов v8_shell исходного кода v8 измените исходный код.

Я пытаюсь вывести значение результата выполнения javascript read the js file.

Функция, используйте шаблон функции и выводите значение результатов. Однако переменные не выводят значения результатов.

Я, получая значение переменной, знаю, что нужно использовать аксессор.

Домашняя страница

Я имел в виду домашнюю страницу ссылки, но описание-это не отношение.

Пример того, как он используется, недостаточен.

Часть проблемы - это местоположение.href javascript.

При использовании метода доступа, но при попытке вывести значение url-адреса возникает ошибка.

Ниже приведен исходный код, который я создал.

Полный источник -> Тест V8shell · GitHub

Компиляция-это не проблема,но не в обычном режиме.

Работа программы выводится на остановку.
// Creates a new execution environment containing the built-in
// functions.
v8::Local<v8::Context> CreateShellContext(v8::Isolate* isolate) {
    // Create a template for the global object.
    v8::Local<v8::ObjectTemplate> global = v8::ObjectTemplate::New(isolate);

    // Bind the global 'print' function to the C++ Print callback.
    global->Set(
        v8::String::NewFromUtf8(isolate, "print", v8::NewStringType::kNormal)
        .ToLocalChecked(),
        v8::FunctionTemplate::New(isolate, Print));
    // Bind the global 'read' function to the C++ Read callback.
    global->Set(v8::String::NewFromUtf8(
        isolate, "read", v8::NewStringType::kNormal).ToLocalChecked(),
        v8::FunctionTemplate::New(isolate, Read));
    // Bind the global 'load' function to the C++ Load callback.
    global->Set(v8::String::NewFromUtf8(
        isolate, "load", v8::NewStringType::kNormal).ToLocalChecked(),
        v8::FunctionTemplate::New(isolate, Load));
    // Bind the 'quit' function
    global->Set(v8::String::NewFromUtf8(
        isolate, "quit", v8::NewStringType::kNormal).ToLocalChecked(),
        v8::FunctionTemplate::New(isolate, Quit));
    // Bind the 'version' function
    global->Set(
        v8::String::NewFromUtf8(isolate, "version", v8::NewStringType::kNormal)
        .ToLocalChecked(),
        v8::FunctionTemplate::New(isolate, Version));
    // Bind the 'Alert' function
    global->Set(
        v8::String::NewFromUtf8(isolate, "alert", v8::NewStringType::kNormal)
        .ToLocalChecked(),
        v8::FunctionTemplate::New(isolate, Alert));
    // Bind the 'Prompt' function
    global->Set(
        v8::String::NewFromUtf8(isolate, "prompt", v8::NewStringType::kNormal)
        .ToLocalChecked(),
        v8::FunctionTemplate::New(isolate, Prompt));
    // Bind the 'location' function
    v8::Local<v8::ObjectTemplate> MLTempl = MakeLocationObjectTemplate(isolate);
    v8::Local<v8::Object> MLObject = MLTempl->NewInstance();
    global->Set(
        v8::String::NewFromUtf8(isolate, "location", v8::NewStringType::kInternalized)
        .ToLocalChecked(), MLObject);

    return v8::Context::New(isolate, NULL, global);
}

Проблема в том, что в приведенном выше коде v8 :: Local MLObject = MLTempl - > NewInstance (); происходят в той части .

И старайтесь следить за ошибкой, в конце концов, ошибка возникает в следующей части.

110 линия

NATIVE_CONTEXT_FIELDS (NATIVE_CONTEXT_FIELD_ACCESSOR)

выводится ошибка доступа isolate-inl.h.

как мне это сделать?

Что я уже пробовал:

google ссылается на сайт, я попытался исправить взгляд на источник предыдущей версии.

KarstenK

Увеличьте время жизни всех объектов. Например, сделайте MLTempl членом класса, чтобы он мог инициализироваться перед вызовом. Посмотрите в исходном файле или напишите автору.

Kito87

Спасибо Вам за ответ. Перед вызовом init () вызывается ли класс MLTeml? Обратитесь к этому комментарию, подумайте еще раз.

0 Ответов