この投稿 check-for-similar-controllers は、コントローラーの接続/切断機能が存在しないことを示しているようです。私たちの GUI には、デバイスが取り外されたとき (ケーブルを引っ張るなど) を検出する必要があります。現在、タイマー (1 秒に 1 回) で DirectAndRawInputEnvironmentPlugin オブジェクトを割り当てることによってこれを行っています。
ただし、デバイスを 9 時間以上プラグを抜いたままにしておくと、アプリがフリーズし、OOME がスローされます。jvisualvm のメモリ サンプラーは、アプリが閉じるまで解放されない大量のメモリ チャンクを占有するかなりの数のインスタンスが DIDeviceObject にあることを示しました。DirectInputEnvironmentPlugin のコンストラクターを確認した後、特権アクションとして ShutdownHook が追加されていることに気付きました。ShutdownHook コードをコメント アウトした後、メモリ リークは解決されましたが、ライブラリが win32 デバイスの列挙に必要なダミー ウィンドウを作成できないため、コードは (別の方法で) 失敗します。dll をデバッグするために jinput ライブラリを構築しようとしましたが、これまでに失敗しました。
上記のいずれかに関するアイデアは、感謝して受け取りました。