是否有可能在同一个dll中有两个不同的插件

is it possible to have two different plugin in the same dll

本文关键字:两个 插件 有可能 同一个 dll 是否      更新时间:2023-10-16

是否有可能在同一个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类型在单个代码库中:

  1. 编辑PluginConfig。Cmake,为以下内容添加多个条目表项:FBSTRING_MIMEType, ACTIVEX_PROGID, FBControl_GUID,和FBSTRING_PluginDescription。确保为。提供唯一的值所有条目,包括FBControl_GUID中的guid。

  2. 编辑Factory.cpp,修改PluginFactory::createPlugin()并添加代码来检查mime类型并创建适当的对象。也添加"mimetype"作为参数"boost:: make_shared (mimetype)"。新代码可以构造"标准的"FBTestPlugin插件,或者一个新的"SimpleMath"插件FBTestPlugin或FBTestMathPlugin c++对象

  3. 在FBTestPlugin.h中,修改FBTestPlugin的构造函数"const std:: string&Mimetype"作为参数。添加"std:: string

  4. 在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修改绘图代码中的插件文本,以便向用户提供视觉反馈

  5. 修改SimpleMathAPI.h和SimpleMathAPI.cpp添加"self"属性和"GetSelf()"方法,两者都返回shared_from_this()。

  6. FBTestPlugin副本。*到FBTestMathPlugin。*并更改对象名称。通过删除LeakFinder来简化FBTestMathPlugin。修改createJSAPI()只返回SimpleMathAPI对象。修改

  7. 修改test.html中的测试代码以测试多个mime类型。创建