Node.jsのHello Worldネイティブモジュールを作成しようとしています
1つのファイルでVS 2012のWin32プロジェクトを取得:
#include <node.h>
#include <v8.h>
using namespace v8;
Handle<Value> Method(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("world"));
}
void init(Handle<Object> target) {
target->Set(String::NewSymbol("hello"),
FunctionTemplate::New(Method)->GetFunction());
}
NODE_MODULE(hello, init)
これはhello.nodeにコンパイルされます。
オプション:
-ダイナミックライブラリ(.dll)
-共通言語ランタイムサポートなし
次のように使用します。
hello = require './hello'
console.log hello.hello()
ローカルマシンで動作します(win8 x64、ノード:0.8.12)
しかし、リモートサーバー(Windowsサーバー2008 x64、ノード:0.8.12、iisnode:0.1.21 x64、iis7)では、次のエラーがスローされます。
アプリケーションがキャッチされない例外をスローして終了しました:エラー:
%1は有効なWin32アプリケーションではありません。C:\ inetpub\test\lib\server\hello.node
at Object.Module._extensions..node(module.js:485:11)
at Module.load(module.js:356:32)
at Function.Module._load(module.js:312:12)
at Module.require(module.js:362:17)
at require(module.js:378:17)
オブジェクト。 (C:\ inetpub\test\lib\server\index.js:32:9)
at Module._compile(module.js:449:26)
at Object.Module._extensions..js(module.js:467:10)
at Module.load(module.js:356:32)
at Function.Module._load(module.js:312:12)
私が試したもの:
アプリプールの設定(win32アプリを有効にする)で遊んでも助けにはなりません。
iisnode x86はx64 osにインストールされません。
エラーのためにx64にコンパイルできません:エラー2エラーLNK1112:モジュールマシンタイプ 'X86'がターゲットマシンタイプ 'x64'と競合していますC:\ derby\hello\build\node.lib(node.exe ) こんにちは
誰か提案はありますか?
手遅れかどうかはわかりませんが、試行錯誤の結果、主に(私のマシンで)問題がWindowsでnodejsをコンパイルして、Visual C++を使用して拡張機能を作成できるという問題がありました。 nodejsをページからインストールしました。デフォルトのインストール(nodejsインストーラーによってPATHに追加されたもの)を使用してテストを実行しようとすると失敗しますが、コンパイル済みのnode.exe(コンパイルするためにコンパイルしたもの)を使用するとVisual C++でライブラリを参照できます)。
要約すると、問題は拡張機能ではなく、nodejsコンパイルにあります。コンパイルしたノードを使用し(VSソリューションを構築するには、そうしたと思います)、リモートマシンで動作するはずです。
注:この問題は、64ビットでコンパイルされたnode.exeを使用して32ビットのDLLを実行していることに依存しています。そのため、32ビットでnode.exeを使用すると機能するはずです。 (少なくとも私の問題は解決しました)
ちょうど同じ問題があり、私のノードとアドオンのアーキテクチャは同じであるにもかかわらず、同様のエラーメッセージが表示されました。ノード実行可能ファイルの名前を変更できないことがわかりました。 node.exe
、私は同時に複数のバージョンをテストしようとしていたので、それらを独自のフォルダに入れなければなりませんでした。その後はすべてうまくいきました。
あなたの問題とは無関係:同じエラーが発生します(Error: %1 is not a valid Win32 application
)拡張子が「.node」のスクリプトを実行しようとしたとき。 node.exe example.node
。その他の拡張子(.js、.txt、拡張子なし)は問題なく機能します。
私の場合、問題は、Linuxを使用して(Windows用に)構築されたWindows上でElectronアプリを実行しようとしたことでした。 Windowsを使用して(Windows用に)ビルドして解決しました。
Windowsでビルドするには、次のコマンドを使用しました。
npm install --global-production windows-build-tools
npm install
npm run build:prod && electron-builder build --windows
最後のコマンドを実行するには、必要なelectron-builderを実行します。
npm install --save-dev electron-builder