Как конвертировать объекты V8 в указатели?

Я пишу Node-приложение (в TS), которое должно быть связано с какой-то нативной библиотекой.

У меня есть библиотека (написанная на C) - пусть это будет черный ящик - и я пишу оболочку, используя NAN. Собственный интерфейс библиотеки можно упростить до следующих функций:

typedef void (*got_message_reply_cb)(context ctx, void * priv, struct X * the_reply);

context lib_connect();
bool lib_send_message(context ctx, message msg, got_message_reply_cb callback, void * priv);

Я считаю, что это довольно просто понять.

Итак, я пытаюсь обернуть ту нативную библиотеку черного ящика во что-то вроде:

class TheLibrary : public Nan::ObjectWrap {
    Initialize(v8::Handle<v8::Object> target);
    SendMessage(...)
}

А затем в объект JavaScript, например:

class TheLibrary {
    SendMessage(message: whatever, callback: (reply) => void); // or return promise, does not matter
}

Как выполнить фактическую обработку обратного вызова в модуле NAN C++? Мне нужно как-то передать обратный вызов (представленный, вероятно, Local<Function> - который, если я правильно понимаю, ограниченный объем) как указатель на функцию, а затем извлечь его обратно. Как это сделать? Спасибо за ваши ответы.

Ответы