Какой способ использовать метод доступа в 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? Обратитесь к этому комментарию, подумайте еще раз.