0

firebreath を使用して NPAPI プラグインを開発しています。サード パーティの dll を使用してゲーム デバイスに統合しています。デバイスの入力は、デバイスへのチャネルを開くときに登録されたメッセージのみのウィンドウ (HWND) を介してプラグインに伝達されます。

最初に、デバイス ドライバーとのハンドシェイク、handshake(HWND,...) が行われ、その後、ユーザーの入力時に CustomWinProc() でコールバックが行われ、通知されます。

私は次のことをしました、

- WIN-CustomCallbackHandler.h の下に Header&CPP ファイルを作成し、

   #include "Win\PluginWindowWin.h"
   #include "Win\WindowContextWin.h"

    class CustomCallbackHandler : public FB::PluginWindowWin
     {
       public:
     CustomCallbackHandler (const FB::WindowContextWin& ctx);

      protected:
     virtual bool CustomWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM   
        lParamm,LRESULT & lRes);
     };

-CustomCallbackHandler.cpp

    [code]
    #include "CustomCallbackHandler.h"
    #include "PluginWindowForwardDecl.h"
    #include "Win\WindowContextWin.h"
    #include "Win\PluginWindowWin.h"

    CustomCallbackHandler::CustomCallbackHandler(const FB::WindowContextWin& ctx) :    
    FB::PluginWindowWin(ctx){
    }

    bool CustomCallbackHandler::CustomWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM 
    lParamm,LRESULT & lRes){
    //if WPARAM is something some operation has to be performed.
 return false;
    }
    [/code]

- Factory.cpp - PluginWindowWin をオーバーライドする次のメソッドを追加

FB::PluginWindowWin* createPluginWindowWin(const FB::WindowContextWin& ctx)
{
    return new CustomCallbackHandler(ctx);

}

-MyFirstPluginAPI.cpp-(自動生成された JSAPIAuto サブクラス)- JS メソッド。

    bool MyFirstPluginAPI::handshake(FB::JSObjectPtr &callback)
     {
        FB::WinMessageWindow window;
        thirdpartymethod(window.getHWND());
     }

ここで、デバッグすると、通常のプラグイン イベントに対して customcallbackhandler が数回呼び出されるのを見ることができましたが、デバイスによって生成されたイベントは利用できません。メッセージ ウィンドウの別のインスタンスが dll に渡されたと思います。

-PluginWindowWin のハンドルを取得するにはどうすればよいですか?
-CustomCallbackHandler でコールバックを受信したら、カスタム sendEvent() を生成するにはどうすればよいですか?

あなたの助けは非常に高く評価されています。

私は Java 開発者ですが、C++ プログラミングの経験はあまりありません。私は根本的な何かが欠けていると信じています。

4

1 に答える 1

1

あなたが望むのは、WinMessageWindow を使用することです:

https://github.com/firebreath/FireBreath/blob/master/src/PluginCore/Win/WinMessageWindow.h

PluginWindowWin を使用したくありません。それは他のものにはあまりにも具体的です。WinMessageWindow は、実行しようとしている種類のことを実行するために特別に作成されたもので、含まれているクラスで winproc ハンドラーを作成できます。

私は最近、WM_DEVICENOTIFY メッセージを受信するためにWinMessageWindow を使用する例を投稿しました。クラスがどのように機能するかの例として使用できると確信しています。

于 2011-12-17T05:21:47.047 に答える