問題タブ [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.
c++ - node-gyp でコンパイルするときに Windows で CFLAGS が機能しない
Windows で node-gyp を使用してコンパイルすると、何らかの理由で CFLAGS が無視されます。誰かがおそらく理由を知っていますか?これは私のコードです:
Binding.gyp
こんにちはWindows.cpp
前もって感謝します :)
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
ます。どうすればいいですか?
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]
私はオンラインで多くの例を調べましたが、これに関してはすべて同じ構文を持っています:
その行に関して、私のコードと彼らのコードの違いがわかりません。
コンパイラが言うことを実行してその行にアンパサンドを追加すると、まったく異なるエラーが発生します。
..\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]
c++ - 非同期スレッドで "Isolate::GerCurrent()" が Null になるのはなぜですか?
私の最終的な目標はこの問題を解決することですが、かなり基本的なことで行き詰まっています。
私のC++モジュール全体は、基本的に次のとおりです。
AsyncWorkisolate
を呼び出した後に NULL になるのはなぜですか?Isolate::GetCurrent()
c++ - Nodejs C/C++ 複数のコアを使用しますか?
NodeJS が単一のコアで実行されるという事実を知っています。しかし、マルチスレッドが実装された NodeJS C/C++ アドオンをビルドするとどうなりますか? このアドオンは複数のコアを消費しますか (想定されている場合)?
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 メソッドにプルできないようにする必要がありますか? もしそうなら、なぜですか?