Как я могу получить доступ к динамической переменной, созданной на C ++, из Javascript? (связан через V8)

Google был достаточно любезен, чтобы объяснить, как обернуть методы класса C ++ с помощью аксессоров, которые можно использовать из движка V8 Javascript.

Однако они не упоминают, как определить имя объекта JavaScript, для которого будут доступны эти свойства доступа.

Как мне сообщить V8 Javascript, как называется экземпляр класса C ++ (из примера)? Или, если у него уже есть название, какое?

Эти две строки настраивают аксессоры:

point_templ.SetAccessor(String::New("x"), GetPointX, SetPointX);
point_templ.SetAccessor(String::New("y"), GetPointY, SetPointY);

Я предполагаю, что их можно использовать вот так из JavaScript:

someObject.x = someObject.y * 2;

Как определить, что такое "someObject"?

Я чувствую, что отсутствует какой-то код, который завершает связывание кода C ++ с оболочкой V8 Javascript.

Например, в примере кода для доступа к статическим глобальным переменным было строка, которая явно предоставляет функции доступа для V8 JavaScript:

Handle<ObjectTemplate> global_templ = ObjectTemplate::New();
global_templ->SetAccessor(String::New("x"), XGetter, XSetter);
global_templ->SetAccessor(String::New("y"), YGetter, YSetter);
Persistent<Context> context = Context::New(NULL, global_templ)

person Leftium    schedule 19.08.2010    source источник


Ответы (1)


Хорошо, я нашел недостающую часть головоломки:

context->Global()->Set(String::New("p"), obj);

Эта строка представляет оболочку объекта obj, созданную на предыдущих шагах, глобальному контексту JavaScript V8 как объект «p». Я назвал его здесь "p", но это может быть любой допустимый идентификатор JavaScript. (исходный код)

person Leftium    schedule 19.08.2010