gpt4 book ai didi

c++ - 是否可以在同一个 dll 中有两个不同的插件

转载 作者:行者123 更新时间:2023-11-30 02:57:43 33 4
gpt4 key购买 nike

是否可以在同一个 dll 中创建两个不同的插件,一个用于通信,另一个作为 Canvas ?

我知道我可以在同一个类(class)做,但我希望第一个是无窗口的(每个浏览器我只需要一个),另一个是有窗口的(我可以在同一个浏览器中创建最多 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 从通信对象动态创建 Canvas 对象并获取 JSAPIAUTO 指针以直接在它们之间传递二进制数据吗?

NpAPI 不支持字节数组,我尝试使用 base64 字符串,但速度很慢。

最佳答案

是的,您可以拥有一个包含多个“插件”的 DLL。实际上它只是一个插件,但它可以处理多种 mimetypes。如果您查看 FBTestPlugin 示例,您会发现它实际上处理三种不同的 mime 类型。这些插件可以选择共享相同的 JSAPI 接口(interface),但它们都在相同的内存空间中,因此您可以(小心!)使用全局变量来共享信息。

假设您的“ Canvas ”对象是您自己的插件的一个实例,您可以使用某种标识符和全局映射将一个值传递给另一个插件实例,以告诉它要使用哪个内存块,等等。您可以不要通过 javascript 将 JSAPI 对象从一个对象传递到另一个对象并取回原始 C++ 对象(至少不是在所有情况下),但您可以传递标识符,让您找到您正在寻找的东西。

您可以在 firebreath repo in the FBTestPlugin project 中找到关于如何支持多种 mimetype 的说明。 .我也会将它们张贴在这里,尽管其中一些细节以后可能会发生变化。


修改原FBTestPlugin如下,支持多种mimetype在单个代码库中:

  1. 编辑 PluginConfig.cmake,为以下内容添加多个条目条目:FBSTRING_MIMEType、ACTIVEX_PROGID、FBControl_GUID 和FBSTRING_PluginDescription。确保您为所有条目,包括 FBControl_GUID 中的 GUID。

  2. 编辑 Factory.cpp,修改 PluginFactory::createPlugin() 并添加代码检查 mimetype 并创建适当的对象。还添加“mimetype”作为参数“boost::make_shared(mimetype)”。新代码可以构建“标准”FBTestPlugin 插件,或新的“SimpleMath”插件FBTestPlugin 或 FBTestMathPlugin C++ 对象。

  3. 在 FBTestPlugin.h 中,修改 FBTestPlugin 构造函数以获取“const std::string& mimetype”作为参数。添加“std::stringm_mimetype;"作为 FBTestPlugin 的私有(private)变量。

  4. 在 FBTestPlugin.cpp 中,修改 FBTestPlugin 构造函数以获取“const std::string& mimetype”作为参数并从中设置 m_mimetypemimetype 参数。修改 createJSAPI() 返回“boost::make_shared(m_host)”代替 “boost::make_shared(FB::ptr_cast(shared_from_this()), m_host)”取决于模仿类型。包括“SimpleMath.h”。根据 mimetype 修改绘图代码中的插件文本,以向用户提供视觉反馈。

  5. 修改 SimpleMathAPI.h 和 SimpleMathAPI.cpp 以添加“self”属性和“GetSelf()”方法,它们都返回 shared_from_this()。

  6. 将 FBTestPlugin.* 复制到 FBTestMathPlugin.* 并更改对象名称。通过删除 LeakFinder 简化 FBTestMathPlugin。调整createJSAPI() 只返回 SimpleMathAPI 对象。修改绘图代码中的插件文本,用于向用户提供视觉反馈。

  7. 修改了 test.html 中的测试代码以测试多种 mime 类型。创造三个插件,并使用所有三个插件测试数学函数。

关于c++ - 是否可以在同一个 dll 中有两个不同的插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14295745/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com