2016-11-04 15 views
5

pythonスクリプトをjavascriptスクリプトに変換したいと考えています。私のpythonスクリプトはdllを読み込み、そのAPIを使用します。javascriptと同等のpython ctypes with node-gyp

processings2D = ctypes.CDLL('processings2D.dll') 
print(processings2D.ImageProcessor2DCreate()) 

私はnode-gypと同じことを試みますが、私のスクリプトはdllを見つけられません。

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がリリースフォルダ内にある/build/Release/processings2D.dll

私は正しい方向にいますか?

答えて

2

ソリューションは、本当に簡単だった:

私のdllが32ビット版だったので、私は良いアーチと私のモジュールを構築し、ノードの良いバージョンで私のテストを実行する必要があります。

node-gyp clean configure --arch=ia32 build 
"C:\Program Files (x86)\nodejs\node.exe" test.js