Преобразование объектов V8 в указатели - PullRequest
0 голосов
/ 09 ноября 2018

Я пишу 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, doesn't matter
}

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

...