相当于Python ctypes和node-gyp的javascript
我想将一个python脚本转换成一个javascript脚本。 我的Python脚本加载一个DLL并使用其API。
processings2D = ctypes.CDLL('processings2D.dll') print(processings2D.ImageProcessor2DCreate())
我尝试做与node-gyp相同,但我的脚本没有find该DLL。
console.log(processings2D.ImageProcessor2DCreate()); ^ TypeError: Cannot load processings2D.dll library
test.js
var processings2D = require('./build/Release/processings2D.node'); console.log(processings2D.ImageProcessor2DCreate());
addon.cc
#include <nan.h> #include "processings2D/processings2D.h" HINSTANCE hDLL = NULL; typedef int(*Fn)(); void ImageProcessor2DCreate(const Nan::FunctionCallbackInfo<v8::Value>& info) { hDLL = LoadLibrary("processings2D.dll"); if(!hDLL) { Nan::ThrowTypeError("Cannot load processings2D.dll library"); return; } Fn fn = (Fn)GetProcAddress(hDLL, "ImageProcessor2DCreate"); if (!fn) { Nan::ThrowTypeError("Could not load ImageProcessor2DCreate function"); FreeLibrary(hDLL); return; } info.GetReturnValue().Set(Nan::New(fn())); } void Init(v8::Local<v8::Object> exports) { exports->Set(Nan::New("ImageProcessor2DCreate").ToLocalChecked(), Nan::New<v8::FunctionTemplate>(ImageProcessor2DCreate)->GetFunction()); } NODE_MODULE(twoD, Init)
binding.gyp
{ "targets": [ { "target_name": "processings2D", "sources": [ "addon.cc" ], "include_dirs": [ "<!(node -e \"require('nan')\")" ] } ] }
dll在Release文件夹/build/Release/processings2D.dll
我在正确的方向?
解决scheme非常简单:
我的DLL是一个32位版本,所以我应该build立我的模块与良好的拱门,并执行我的testing与良好的节点版本。
node-gyp clean configure --arch=ia32 build "C:\Program Files (x86)\nodejs\node.exe" test.js