Создать & amp; передать объект C ++ в функцию Node.js V8

Я хотел бы иметь возможность создавать экземпляр класса C ++ и передавать его в качестве аргумента для обратного вызова JavaScript. Класс наследуется от ObjectWrap, и доступен и используется в Node.js.

Я могу передать экземпляры одного и того же класса в обратный вызов, если указанный экземпляр пришел из JavaScript.

Это основной пример того, что мне нужно сделать:

MyClass *instance = new MyClass();

// If was passed as the first param to this method, commit is set as below, this code works.
// MyClass *instance = ObjectWrap::Unwrap<MyClass>(args[0]->ToObject());

// Assign some property values to commit
Handle<Value> argv[] = { instance->handle_ };
ar->callback->Call(Context::GetCurrent()->Global(), 1, argv);

Это не работает, вместо этого это segfaults. gdb говорит мне:

Program received signal EXC_BAD_ACCESS, Could not access memory.

Как я могу изменить свой код, чтобы я мог передать свой instance на обратный звонок?


Обновить: рассматриваемый класс можно посмотреть на Github: commit.cc.

3

Решение

Ответ в том, что я делал это неправильно.

Правильный код:

Local<Value> instance = MyClass::constructor_template->NewInstance();

// Assign some property values to commit
Handle<Value> argv[] = { instance };
ar->callback->Call(Context::GetCurrent()->Global(), 1, argv);

Чтобы получить MyClass пример:

MyClass *instanceOfMyClass = ObjectWrap::Unwrap(instance);
2

Другие решения

Других решений пока нет …