%PDF- %PDF-
Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/test/addons/dlopen-ping-pong/ |
Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/test/addons/dlopen-ping-pong/binding.cc |
#include <node.h> #include <v8.h> #ifndef _WIN32 #include <dlfcn.h> extern "C" __attribute__((visibility("default"))) const char* dlopen_pong(void) { return "pong"; } namespace { using v8::FunctionCallbackInfo; using v8::Isolate; using v8::Local; using v8::Object; using v8::String; using v8::Value; typedef const char* (*ping)(void); static ping ping_func; void LoadLibrary(const FunctionCallbackInfo<Value>& args) { const String::Utf8Value filename(args.GetIsolate(), args[0]); void* handle = dlopen(*filename, RTLD_LAZY); if (handle == nullptr) fprintf(stderr, "%s\n", dlerror()); assert(handle != nullptr); ping_func = reinterpret_cast<ping>(dlsym(handle, "dlopen_ping")); assert(ping_func != nullptr); } void Ping(const FunctionCallbackInfo<Value>& args) { Isolate* isolate = args.GetIsolate(); assert(ping_func != nullptr); args.GetReturnValue().Set(String::NewFromUtf8( isolate, ping_func()).ToLocalChecked()); } void init(Local<Object> exports) { NODE_SET_METHOD(exports, "load", LoadLibrary); NODE_SET_METHOD(exports, "ping", Ping); } NODE_MODULE(NODE_GYP_MODULE_NAME, init) } // anonymous namespace #endif // _WIN32