2013-03-05 9 views
25

私は窓で作業しますが、私はここでMacで悩まされています。私はCanon SDKを持っており、その上にJNAラッパーを構築しています。 Windows上でうまく動作し、Macでいくつかの助けが必要です。 sdkには、コールバック関数を登録できる関数があります。基本的にカメラでイベントが発生すると、コールバック関数が呼び出されます。 Windows上でOSからイベントを取得

、登録した後、私は、イベントを取得するとして、イベントをディスパッチするUser32を使用する必要があります。APIの

private static final User32 lib = User32.INSTANCE; 
boolean hasMessage = lib.PeekMessage(msg, null, 0, 0, 1); // peek and remove 
if(hasMessage){ 
    lib.TranslateMessage(msg); 
    lib.DispatchMessage(msg); //message gets dispatched and hence the callback function is called 
} 

、私は、Macに似たクラスを見つけることができません。私はこれについてどうやって行くのですか?

PS:Unix用JNAapiは広範囲であり、何を探すべきか分かりませんでした。 referenceは役に立ちます

+0

GCEventRef、https://developer.apple.com/library/mac/documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference .html –

+0

UNIX用のJNAのプラットフォームマッピングのほとんどはX11向けであり、OS Xにはあまり特筆すべきものはありません。[Rococoa](http://code.google.com/p/rococoa/) OS Xマッピングの – technomage

+0

@technomageロココアに移行することはできません。コードを書き直さなければならないからです。 Windowsは既にうまく動作します。メッセージを受け取るための技術が必要です。 – Jatin

答えて

3

このソリューションはCocoaフレームワークを使用しています。ココアは推奨されておらず、私は他の代替ソリューションを知らない。しかし、以下は魅力のように動作します。

最後に、私はフレームワークを使用して解決策を見つけました。ここに私が必要とする呼び出しを定義する私のMCarbonインターフェイスがあります。

public interface MCarbon extends Library { 
    MCarbon INSTANCE = (MCarbon) Native.loadLibrary("Carbon", MCarbon.class); 
    Pointer GetCurrentEventQueue(); 
    int SendEventToEventTarget(Pointer inEvent, Pointer intarget); 
    int RemoveEventFromQueue(Pointer inQueue, Pointer inEvent); 
    void ReleaseEvent(Pointer inEvent); 
    Pointer AcquireFirstMatchingEventInQueue(Pointer inQueue,NativeLong inNumTypes,EventTypeSpec[] inList, NativeLong inOptions); 
    //... so on 
    } 

問題を解決するには、以下の機能を使用して解決される。

NativeLong ReceiveNextEvent(NativeLong inNumTypes, EventTypeSpec[] inList, double inTimeout, byte inPullEvent, Pointer outEvent); 

これは仕事をしていません。ドキュメントごとに - また

This routine tries to fetch the next event of a specified type. 
If no events in the event queue match, this routine will run the 
current event loop until an event that matches arrives, or the 
timeout expires. Except for timers firing, your application is 
blocked waiting for events to arrive when inside this function. 

ないReceiveNextEvent場合、MCarbonクラスで述べたように、他の機能は、上記有用であろう。

私はCarbonフレームワークdocumentationは、問題を解決するためのより多くの洞察と柔軟性を与えると思います。 Carbonのほかに、フォーラムで人々はCocoaを使って解決について言及しましたが、私は気付いていません。

編集:technomargeのおかげで、より多くの情報あなたはおそらくチェックアウトしたくなるでしょうhere

+0

Cool。しかし、あまりにも悪いカーボンは非難されています。 –

+0

@AmigableClarkKantその他の代替手段はありますか? – Jatin

+0

申し訳ありません、私が知っているわけではありません。 (しかし、あるかもしれません。) –

関連する問題