【问题标题】:May I create multiple Plugins in one DLL using NPAPI?我可以使用 NPAPI 在一个 DLL 中创建多个插件吗?
【发布时间】:2012-01-16 14:50:23
【问题描述】:

到目前为止,我所看到的,每个.dll 文件只能有一个插件,对吗?浏览器每个 dll 只调用 NP_GetEntryPointsNP_InitializeNP_Shutdown 一次,对吗?

我的目标是在一个动态库中创建多个插件。这可能吗?如果有,怎么做?

【问题讨论】:

  • 如果你还没有发现,看看Firebreath是否适合你的项目。
  • 即使 FireBreath 不适合您的项目,它也支持多种 mimetype —— 您可以构建一个 firebreath 插件并深入了解它是如何做到的。

标签: c++ c plugins dll npapi


【解决方案1】:

到目前为止,我所看到的,每个 .dll 文件只能有一个插件,对吗?

不,您可以在一个 DLL 中实现多个插件。

浏览器每个 dll 只调用 NP_GetEntryPoints、NP_Initialize 和 NP_Shutdown “一次”,对吧?

每个进程和加载仅一次(请记住,当没有实例处于活动状态时,它将被卸载)。

我的目标是在一个动态库中创建多个插件。这可能吗?如果有,怎么做?

这是可能的。您只需为同一个动态库注册不同的 mimetype(例如,在 Windows 上,注册表中的多个 mimetype 条目指向同一个 DLL)。

NPP_New() 获取NPMIMEType 作为它的第一个参数,它可以让您确定请求了哪个“插件”。

另外,NP_GetMIMEDescription() 需要调整(用于 Linux 和 Mac OS)。

在 Windows 上,您应该在版本信息(条目 MIMEType)中有 mimetypes 列表,由 | 分隔。

【讨论】:

  • NP_GetMIMEDescription 在哪里/何时被调用?我可以看到docs,但没有关于在哪里实现该功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 2020-06-04
  • 2016-05-22
  • 1970-01-01
相关资源
最近更新 更多