問題タブ [node.js-addon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
895 参照

c++ - node-gyp でコンパイルするときに Windows で CFLAGS が機能しない

Windows で node-gyp を使用してコンパイルすると、何らかの理由で CFLAGS が無視されます。誰かがおそらく理由を知っていますか?これは私のコードです:

Binding.gyp

こんにちはWindows.cpp

前もって感謝します :)

0 投票する
0 に答える
600 参照

c++ - node.js の C++ モジュールから JavaScript コールバックを繰り返し呼び出す

カメラからのデータを処理する node.js モジュールを C++ で作成しています。app.js新しいデータが利用可能になるたびに、ファイルでコールバック関数を呼び出したいと考えています。

現時点で持っているもの

現在、ノードの javascript ファイル ( app.js) に次のコードがあります。毎秒 C++ モジュールの関数を呼び出し、これまでに処理されたフレーム数を返します。

私の C++ ファイルには、次の関数があります。

1.)フレーム数を取得する関数があります-上記のようにjavascriptから呼び出される関数-、ここでframeCounterグローバル変数を参照します。

2.)そして、新しいフレームが利用可能になるたびにトリガーされる C++ モジュールに C++ コールバック関数があります (明確にするために、このコールバックは node.js から独立しており、node.js コールバックとは直接関係ありません)。 )。

これはすべて正常に機能します。

実現したいこと

setInterval私のjavascriptコードで関数を登録する代わりに。カメラから新しいフレームが利用可能になるたびに繰り返し呼び出される関数を C++ モジュールに登録したいと思います。のように動作するはずsetIntervalですが、毎秒トリガーされるのではなく、フレームが使用可能になったときにトリガーされます。

私がjavascript側で望んでいるコードは次のようなものです:

C++ モジュール内で、次のようなことをしたいと思います。

そして、javascipt-callback を次のように登録する関数setMyFrameInterval:

NewFrameAvailableでは、 (フレームが使用可能になったときにトリガーされる C++ コールバック関数)から JavaScript コールバックを呼び出すにはどうすればよいでしょうか。基本的に、javascript関数を関数内でグローバルに利用できるようにして、setMyFrameInterval関数にも認識されるようにする必要があると思いnewFrameAvailableます。どうすればいいですか?

0 投票する
1 に答える
732 参照

c++ - node-nan を使用して node.js モジュールで WindowsHookEx を設定する

グローバルキーバインディングを使用して特定の機能を実行できる Electron node.js アプリケーションを作成しようとしています。残念ながら、Electron のグローバル キーバインド API はゲームでは機能しないため、これらの低レベルのキー イベントをリッスンするネイティブ ノード モジュールを作成する必要があります。

そのため、node-gyp を使用してプロジェクトを Visual Studio 2015 でコンパイルし、nan を使用してノードと C++ 間の通信を提供しています。プロジェクトの両方の側面(低レベルのキーバインディングとnode.js <--> nan通信)を別々に機能させることができましたが、それらを組み合わせるのに問題があります。また、c++ の経験がほとんどないことも認めています (c++ プログラムを 1 つも作成したことがありません)。

問題 #1: メッセージを node.js に送り返すには、AsyncProgressWorker::ExecutionProgress のポインターをコピーしてクラス全体で使用できるようにする必要があります。これにより、HookCallback がトリガーされたときに node.js にメッセージを送信できます。 .

コンパイラはこれを好まない

..\binding.cc(21): エラー C2440: '=': 'const Nan::AsyncProgressWorker::ExecutionProgress *' から 'Nan: :AsyncProgressWorker::ExecutionProgress *' に変換できません [C:\Users\eksrow\ gdrive\projects\vscode\node-native-hello-world\build\bindin g.vcxproj].

..\binding.cc(21): 注: 変換により修飾子が失われます

フォーマット:

「const Nan::AsyncProgressWorker::ExecutionProgress *」

「Nan::AsyncProgressWorker::ExecutionProgress *」

これは、キーワード const をプライベート メンバー *executionProgress; に追加することで解決できました。しかし、なぜそれが修正されるのかわかりません。 const 変数は、一度設定すると変更されるべきではありません。なぜこれがコンパイルされるのですか?

問題#2:これは非常に独特です:

..\binding.cc(22): エラー C3867: 'KeyboardEventWorker::HookCallback': 非標準の構文。「&」を使用してメンバーへのポインターを作成します [C:\Users\eksrow\gdrive\projects\vscode\node-native-hello-world\build\binding.vcxproj]

私はオンラインで多くの例を調べましたが、これに関してはすべて同じ構文を持っています:

  1. SetWindowsHookEx #1
  2. SetWindowsHookEx #2

その行に関して、私のコードと彼らのコードの違いがわかりません。

コンパイラが言うことを実行してその行にアンパサンドを追加すると、まったく異なるエラーが発生します。

..\binding.cc(22): エラー C2276: '&': バインドされたメンバー関数式に対する不正な操作 [C:\Users\eksrow\gdrive\proj ects\vscode\node-native-hello-world\build\binding .vcxproj] ..\binding.cc(22): エラー C2660: 'SetWindowsHookExA': 関数は 3 つの引数を取りません [C:\Users\eksrow\gdrive\project s\vscode\node-native-hello-world\build \binding.vcxproj]

0 投票する
1 に答える
212 参照

c++ - 非同期スレッドで "Isolate::GerCurrent()" が Null になるのはなぜですか?

私の最終的な目標はこの問題を解決することですが、かなり基本的なことで行き詰まっています。

私のC++モジュール全体は、基本的に次のとおりです。

AsyncWorkisolateを呼び出した後に NULL になるのはなぜですか?Isolate::GetCurrent()

0 投票する
2 に答える
208 参照

c++ - Nodejs C/C++ 複数のコアを使用しますか?

NodeJS が単一のコアで実行されるという事実を知っています。しかし、マルチスレッドが実装された NodeJS C/C++ アドオンをビルドするとどうなりますか? このアドオンは複数のコアを消費しますか (想定されている場合)?

0 投票する
1 に答える
469 参照

node.js - ノード NAN: AsyncWorker の Execute メソッドで GetFromPersistent を呼び出して set fault を取得する

完了時にコールバックを伴う長時間実行操作を含むノードのネイティブ拡張機能を構築しています。

ノードバッファを呼び出しに渡しています。拡張機能によって処理される内容のペイロードが含まれています。

AsyncWorker のコンストラクターの永続ストレージにバッファーを格納し、後で必要になったときに取得できるようにする必要があります。

この例 (nan テスト スイートから) は、私が通常コードのベースとしているものです: https://github.com/nodejs/nan/blob/master/test/cpp/bufferworkerpersistent.cpp

このテストは機能しますが、HandleOKCallback メソッドまでバッファに対して何も実行されません。これは私にとってあまり興味深いことではありません。Execute メソッド中にバッファにアクセスする必要があります。

次のように、テストの Execute() メソッドに行を追加して、バッファにアクセスしようとすると、次のようになります。

GetFromPersistent 呼び出しでセグ フォールトが発生します。

私の質問は次のとおりです。何が欠けていますか? 永続オブジェクトを Execute メソッドにプルできないようにする必要がありますか? もしそうなら、なぜですか?