如何将C++对象传递给NPAPI插件
How to pass C++ object to NPAPI plugin?
我正在Windows上用C++编写一个NPAPI插件。当我的插件被实例化时,我想从我的主应用程序中向它传递一些私有数据(特别是,我想向它传递一个指向C++对象的指针(。似乎没有这样的机制。我是不是错过了什么?我不能简单地在插件实例中创建我的对象,因为它应该存在于插件实例的范围之外,并且即使插件实例被破坏也会持续存在。
编辑:
我正在通过CEF使用C++中的嵌入式插件。这意味着我的代码本质上就是浏览器和插件。显然,这不是标准NPAPI插件的行为方式,所以这可能不是NPAPI本身所支持的。
您不能将C++对象传递给javascript;您可以做的是传递一个NPObject,它也是一个C++对象,并通过NPRuntime接口公开内容。
请参阅http://npapi.com/tutorial3了解更多信息。
你可能还想看看FireBreath框架,它极大地简化了这样的事情。
编辑:我好像误解了你的问题。你想要的是能够存储链接到插件实例的数据。您需要的是在创建插件时提供给您的NPP;NPP有两个成员,ndata(netscape数据(和pdateta(插件数据(。updatea指针由您控制——您可以将其设置为指向任何您想要的任意值,然后在您想要使用它时将其强制转换回真实类型。当然,请确保在NPP_Destroy上强制转换并删除它。我通常会创建一个结构来保存一些信息。FireBreath使用这个结构,并将所有插件调用发送到插件对象实例中,这样你就可以把它当作一个正常的对象。
FireBreath的相关代码示例:https://github.com/firebreath/FireBreath/blob/master/src/NpapiCore/NpapiPluginModule_NPP.cpp#L145
特别注意NPP_New和NPP_Destroy;还要特别注意如何使用NPP的updatea成员。
这也在中进行了讨论http://npapi.com/tutorial2
没有办法通过NPAPI实现这一点,因为这个概念在NPAPI术语中没有意义。即使你破解了一些传递原始指针的东西,也会假设所有东西都在一个进程中运行,所以如果CEF切换到Chromium设计的多进程方法,破解就会失败。
你最好假装它们是不同的进程,并使用一些非NPAPI方法在主应用程序和插件之间共享你需要的东西。
- 从C++本机插件更新Vector3数组
- 使用CMake创建QML插件
- 不能在NPAPI插件中使用POCO计时器
- 在我的应用程序中使用NPAPI插件
- NPAPI:修改插件对象的 CSS 属性
- 我可以使用NPAPI在一个DLL中创建多个插件吗
- 使用授予的权限运行NPAPI插件(firebreath)
- 如何在扩展中调用npapi插件方法
- 支持Twain的Visual Studio c++ NPAPI插件
- 新手chrome插件开发人员需要帮助开始使用NPAPI
- Mac上的NPAPI插件-启动另一个进程
- 适用于Chrome的NPAPI插件无法通过NP_Initialize
- 如何将C++对象传递给NPAPI插件
- NPAPI插件-传递xulrunner组件(nsCOMptr)的实例
- 我可以添加外部DLL到npapi插件,应该安装在浏览器中
- 如何获得网站的url调用NPAPI插件
- 如何处理从浏览器打开的文件NPAPI插件
- 使用Firebreath为Chrome创建的NPAPI我可以从扩展而不是从HTML加载页面调用插件方法
- 如何使用npapi插件获得附加到http请求的postdata
- 调用NPAPI插件对象上的方法会重新生成插件