我可以使用 NPAPI 在一个 DLL 中创建多个插件吗?
Posted
技术标签:
【中文标题】我可以使用 NPAPI 在一个 DLL 中创建多个插件吗?【英文标题】:May I create multiple Plugins in one DLL using NPAPI? 【发布时间】:2012-01-16 14:50:23 【问题描述】:到目前为止,我所看到的,每个.dll
文件只能有一个插件,对吗?浏览器每个 dll 只调用 NP_GetEntryPoints
、NP_Initialize
和 NP_Shutdown
一次,对吗?
我的目标是在一个动态库中创建多个插件。这可能吗?如果有,怎么做?
【问题讨论】:
如果你还没有发现,看看Firebreath是否适合你的项目。 即使 FireBreath 不适合您的项目,它也支持多种 mimetype —— 您可以构建一个 firebreath 插件并深入了解它是如何做到的。 【参考方案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,但没有关于在哪里实现该功能。以上是关于我可以使用 NPAPI 在一个 DLL 中创建多个插件吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Visual C ++中创建一个包含对话框的dll(对于Windows应用程序为Dll)[关闭]