感谢您的帮助和建议。
即使我将.so文件放入正确的文件夹 /usr/lib/mozilla/plugins /和Qt Lib路径中,我也能找出问题,为什么我的插件没有被调用, 。
有两个原因...
不得不启用编译为编译器指令中的定义XP_UNIX(-DXP_UNIX)。 这会考虑的功能不同的原型,并实现
extern "C"
NPError OSCALL NP_Initialize(NPNetscapeFuncs *browserFuncs
#ifdef XP_UNIX
, NPPluginFuncs *pluginFuncs
#endif
)
{
// keep a pointer to the browser functions
g_browser = browserFuncs;
// any memory that is to be shared by all instances of
the browser plugin should be initialized here.
;
#ifdef XP_UNIX
// under Linux, as the browser won't call NP_GetEntryPoints()
explicitly, do it now to fill in <pluginFuncs>
return NP_GetEntryPoints(pluginFuncs);
#else
return NPERR_NO_ERROR;
#endif
}
和
extern "C"
#ifdef XP_UNIX
NPError NP_GetValue(void* instance, NPPVariable variable, void *value)
#else
NPError NP_GetValue(NPP instance, NPPVariable variable, void *value)
#endif
2 ..有2个功能NP_GetValue和NPP_GetValue。
extern "C"
NPError NP_GetValue(void* instance, NPPVariable variable, void *value);
和
NPError NPP_GetValue(NPP instance, NPPVariable variable, void *ret_value);
NPP_GetValue是一个插件功能,其登记的,应当在 NP_GetEntryPoints
extern "C"
NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* NPPluginFuncsptr)
{
......
NPPluginFuncsptr->newp = NPP_New;
NPPluginFuncsptr->getvalue = NPP_GetValue;
NPPluginFuncsptr->setvalue = NPP_SetValue;
return NPERR_NO_ERROR;
}
进行在我的代码只有NP_GetValue年实施NPP_GetValue没有落实。 因此,NPP_GetValue在.so中未定义,由于它没有加载.so。
在实现函数NPP_GetValue时,该函数被定义并导出到.so文件中,并且能够成功加载它。
从浏览器中调用的功能,插件是如下的顺序...
NP_Initialize - >浏览器首先调用初始化函数。>从NP_Initialize为Linux明确提出到 暴露/导出插件功能 -
NP_GetEntryPoints(在Linux中的情况下,一套插件功能应通过调用 NP_GetEntryPoints明确地作为浏览器不会叫GetEntryPoints出口)。
NP_GetValue变量:1 - >从浏览器调用以获取插件名称 (NPPVpluginNameString)
NP_GetValue变量:2 - 从浏览器>调用以获取 插件说明(NPPVpluginDescriptionString)
NP_GetMimeDescription - >从浏览器中调用以获得MimeType描述 (该函数应该返回Mime类型描述 例如: 返回(“application/basic-plugin:bsc:Plug-in SDK sample”);)
NPP_New - >从浏览器调用创建插件实例。
NPP_GetValue插件:main.cpp中,NPP_GetValue,446ENTRY - >从浏览器插件获取特定数据调用...
......
请注意以上顺序中的下一个函数将被称为 IF和ONLY如果前一个函数调用返回成功。:-)
它显示在about:plugins? – taxilian 2012-07-13 23:02:35
嗨它不显示在about:插件在Mozilla中。我无法弄清楚为什么..... – Techtotie 2012-07-16 05:09:16
尝试在调试模式下加载firefox(firefox -g);你可能会在输出中看到一些有用的东西。当你到达gdb控制台时,只需键入run – taxilian 2012-07-16 06:41:05