Как мне присвоить имя v8 :: Object, чтобы скрипты могли получить к нему доступ? - PullRequest
0 голосов
/ 27 апреля 2020

В настоящее время я пытаюсь добавить функциональность сценариев в свое приложение C ++ с помощью v8. Цель состоит в том, чтобы обработать некоторые данные в буферах с JS и затем вернуть результат. Я думаю, что могу сгенерировать ArrayBuffer, используя New с соответствующим BackingStore. Результатом будет Местный. Теперь я хотел бы запускать сценарии через v8::Script::Compile и v8::Script::Run. Каково будет имя ArrayBuffer - или как я могу назначить ему имя, чтобы оно было доступно в скрипте? Нужно ли указывать Global, если мне нужно запустить несколько сценариев на одном ArrayBuffer?

1 Ответ

0 голосов
/ 27 апреля 2020

Если вы хотите, чтобы скрипты имели доступ, скажем, my_array_buffer, то вам нужно установить ArrayBuffer как свойство глобального объекта. См. https://v8.dev/docs/embed для ознакомления с встраиванием V8 и дополнительными примерами , связанными оттуда. Короче говоря, все сводится к следующему:

global_object->Set(context, 
                   v8::String::NewFromUtf8(isolate, "my_array_buffer"), 
                   array_buffer);

Вам не нужно хранить ArrayBuffer в Global, чтобы это работало.

...