我可以使用 NPAPI 在一个 DLL 中创建多个插件吗?

Posted

技术标签:

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

到目前为止,我所看到的,每个.dll 文件只能有一个插件,对吗?浏览器每个 dll 只调用 NP_GetEntryPointsNP_InitializeNP_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 中创建多个插件吗?的主要内容,如果未能解决你的问题,请参考以下文章

可以在多线程 DLL 的接口函数中创建线程吗?

在 Visual Studio 2005 中创建 DLL

MSBuild 不在 Bin 目录中创建 DLL

如何在Visual C ++中创建一个包含对话框的dll(对于Windows应用程序为Dll)[关闭]

您可以在使用 JNI 从 java 调用的 c++ 函数中创建一个新的 JVM 吗?

在 VC++ 中创建 DLL (Visual Studio 2008)