2011-01-24 13 views
1

Javaクライアントでネイティブコードによって作成されたグローバルイベントにアクセスしようとしています。私はこの目的のためにJNAを使ってkernel32.dllのOpenEventメソッドを呼び出しています。しかし、このメソッドは常にNULLを返し、GetLastErrorは2を返します。これはFile not foundです。JavaがCreateEventを使用して作成したグローバルイベントにアクセスできる

私は、JVMがこれらのグローバルなイベントを見ることができるかどうか疑問に思いました。

- Vinzy

+0

[this](http://stackoverflow.com/questions/3590226/working-example-of-jna-mouse-hook/4094882#4094882)が役立つ可能性があります –

答えて

0

はどのようにあなたのopenEventを呼ぶのですか?

は、私はそれは好みの問題ですが、私が思う、あなたが引数としてオブジェクトを使用することができる唯一の違い、この

int result = kernel32.OpenEvent(10000, false, "Global\\nameOfEvent"); //request for deletion 

のようなものだと仮定します。

多分あなたが電話のコードを提供すれば、あなたを助けることができるかもしれません。あなたのネイティブコードのどこかでCreateEventを呼び出すかどうか尋ねられる別のものです。あなたは、WindowsのAPIを掘り下げる場合は、あなたがそれに気づくでしょう:

を「機能は、いくつかの プロセスがすでにのCreateEvent関数を使用してイベント を作成した場合にのみ成功します。」

ソース:あなたの状況では、イベントを作成するものではありませんでした場合は、多くのトラブルになります意味

http://msdn.microsoft.com/en-us/library/ms684305(v=vs.85).aspx。あなたが作成していないイベントのハンドルを取得する方法がありますが、もう少し複雑で、より多くの情報を提供することから始めましょう。

乾杯。

それを要約すると:あなたはどこでもあなたのコード内でCreateEventを呼び出さない場合はOpenEventを呼び出したとき

は、問題が発生しています。この問題を回避するには、基本的にどのプロセス/スレッドがイベントのロックを保持しているかを見つけてスレッド(jvm)に渡す必要があります。

コードでCreateEventを呼び出すと、イベントへの参照を取得する際に問題が発生していないはずです。原因は他の場所です。

いずれにしても、もう少しコードがうまくいくでしょう。

関連する問題