是否有可能在同一个dll中有两个不同的插件
is it possible to have two different plugin in the same dll
是否有可能在同一个dll中创建两个不同的插件,一个用于通信,另一个作为画布?
我知道我可以在同一个类中做到这一点,但我希望第一个是无窗口的(我只需要一个浏览器),另一个是有窗口的(我可以在同一个浏览器中创建多达4个)。
我希望能够在它们之间进行选择,就像这样
<object id="plugin0" type="application/x-communication" width="0" height="0">
<param name="onload1" value="pluginLoaded" />
<object id="plugin1" type="application/x-canvas" width="320" height="240">
<param name="onload2" value="pluginLoaded" />
我可以使用FB::DOM从通信对象动态地创建画布对象,并获得JSAPIAUTO指针直接在它们之间传递二进制数据吗?
NpAPI不支持字节数组,我尝试使用base64字符串,但它非常慢
是的,你可以有多个"插件"的一个DLL。实际上它只是一个插件,但它可以处理多个mime类型。如果你看一下FBTestPlugin的例子,你会发现它实际上处理了三种不同的mime类型。这些插件可以选择共享相同的JSAPI接口,但是它们都在相同的内存空间中,所以您可以(小心!)使用全局变量来共享信息。
假设你的"canvas"对象是你自己插件的一个实例,你可以使用某种类型的标识符和一个全局映射来传递一个值给其他插件实例,告诉它使用哪块内存,等等。你不能通过javascript将JSAPI对象从一个传递到另一个,然后得到原始的c++对象(至少不是在所有情况下),但是你可以传递标识符,让你找到你正在寻找的东西。
你可以在FBTestPlugin项目的firebreath repo中找到关于如何支持多种mime类型的注释。我也会把它们贴在这里,尽管这些细节可能会在以后发生变化。
修改原FBTestPlugin如下,以支持多种mime类型在单个代码库中:
-
编辑PluginConfig。Cmake,为以下内容添加多个条目表项:FBSTRING_MIMEType, ACTIVEX_PROGID, FBControl_GUID,和FBSTRING_PluginDescription。确保为。提供唯一的值所有条目,包括FBControl_GUID中的guid。
-
编辑Factory.cpp,修改PluginFactory::createPlugin()并添加代码来检查mime类型并创建适当的对象。也添加"mimetype"作为参数"boost:: make_shared (mimetype)"。新代码可以构造"标准的"FBTestPlugin插件,或者一个新的"SimpleMath"插件FBTestPlugin或FBTestMathPlugin c++对象
-
在FBTestPlugin.h中,修改FBTestPlugin的构造函数"const std:: string&Mimetype"作为参数。添加"std:: string
-
在FBTestPlugin.cpp中,修改FBTestPlugin的构造函数"const std:: string&作为参数,并设置m_mimetypemimetype参数。修改createJSAPI()以返回"boost:: make_shared (m_host)"而不是"boost:: make_shared (FB: ptr_cast (shared_from_this ()), m_host)"取决于mime类型。包括"SimpleMath.h"。根据mimetype修改绘图代码中的插件文本,以便向用户提供视觉反馈
-
修改SimpleMathAPI.h和SimpleMathAPI.cpp添加"self"属性和"GetSelf()"方法,两者都返回shared_from_this()。
-
FBTestPlugin副本。*到FBTestMathPlugin。*并更改对象名称。通过删除LeakFinder来简化FBTestMathPlugin。修改createJSAPI()只返回SimpleMathAPI对象。修改
-
修改test.html中的测试代码以测试多个mime类型。创建
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 将fold表达式与std::一起用于两个元组
- 如何在C++中比较两个char数组
- 给定两个偶数,求出它们之间所有偶数的平方和
- 比较两个大小不等的映射c++
- 两个插件链接到具有不同实现(代码)的同名 DLL 或共享库对象 (so)
- Qt中两个插件的信号/插槽交互
- 分割错误在两个浏览器插件具有相同的全局变量
- 是否有可能在同一个dll中有两个不同的插件