7

ここに質問を投稿するのはこれが初めてです。通常はアーカイブで回答を見つけますが、今回は困惑しています。

Windows Driver Kit を使用するベンダーのコードを使用して、ジョイスティックからデータを取得しています。データは 6 つの要素を持つ配列の形式です (これは 6 自由度のマウスです)。

私はすでにデータを取得する必要があるコードを書いていましたが、それは C++ で書かれています...標準ライブラリをベクターなどでよく使用します。WDK で標準ライブラリを使用することは大きな頭痛の種のようで、作業を開始しようとして数日を費やしましたが失敗しました。私の次のアイデアは boost::interprocess を使用することでしたが、これは同じ理由で WDK で使用するのが困難です。

C プロセスと C++ プロセスの間でメモリを共有する方法があるかどうか疑問に思っています。C プログラムを使用して配列をメモリに書き込み、C++ プログラムから読み取りたいと思います。それは非常に速く発生する必要があり、書き込みの途中でそれを読み取らないようにする方法が必要です (ミューテックス?)。

アイデアや提案は大歓迎です。

EDIT 代わりに DLL を作成しましたが、C++ プロジェクトから呼び出すことができる getValues() 関数を持つ DLL ができました。ただし、c のものを非表示にするために pimpl イディオムを使用する必要がありました。助けてくれてありがとう!!

4

1 に答える 1

1

何か見逃していたのかもしれませんが、ジョイスティックのデータを取得するプロセスを作成したようです。トラブルを避けるために、そのプロセスをコメントで提案されている C DLL に置き換えます。メインの C++ アプリケーションは、その DLL 内の関数を呼び出すだけで、ロックやプロセス間通信について心配することなく、ジョイスティック データを取得できます。

もちろん、2 つのプロセスが必要な場合は、DLL とプロセス レベルのロックで共有メモリを使用する必要があります。DLL は各プロセスの仮想空間に個別にロードされるため、共有メモリが必要です。何も共有されないため、共有メモリが必要です。

于 2013-01-09T16:45:37.047 に答える