Gui*_*ent 6 dll node.js node-gyp
我想将python脚本转换为javascript脚本.我的python脚本加载一个DLL并使用它的API.
processings2D = ctypes.CDLL('processings2D.dll')
print(processings2D.ImageProcessor2DCreate())
我尝试使用node-gyp做同样的事情,但我的脚本找不到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
我是朝着正确的方向吗?
解决方案非常简单:
我的 dll 是 32 位版本,因此我应该使用 32 位arch标志构建我的模块,并使用 32 位版本的 Node.js 执行测试。
node-gyp clean configure --arch=ia32 build
"C:\Program Files (x86)\nodejs\node.exe" test.js
| 归档时间: | 
 | 
| 查看次数: | 508 次 | 
| 最近记录: |