0

我正在使用 firebreath 开发一个 NPAPI 插件。我正在使用第三方 dll 集成到游戏设备。设备上的输入通过在打开设备通道时注册的仅消息窗口 (HWND) 传播到插件。

最初,与设备驱动程序握手,握手(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 处理程序。

我最近发布了一个使用 WinMessageWindow来接收 WM_DEVICENOTIFY 消息的示例;我相信您可以将其用作课程如何帮助您入门的示例。

于 2011-12-17T05:21:47.047 回答