NPAPI插件-传递xulrunner组件(nsCOMptr)的实例

NPAPI plugin - Pass instance of xulrunner component (nsCOMptr)

本文关键字:nsCOMptr 实例 组件 插件 传递 xulrunner NPAPI      更新时间:2023-10-16

我在搜索后找不到解决方案,所以我不得不问!请原谅我的语言,因为我是NPAPI业务的新手。

我所拥有的,是一个现有的插件,它以大约100毫秒的周期从一个nsComponent (dataCreator)的本地运行的xulrunner应用程序中接收数据。结果看起来非常好,xul应用程序到目前为止是稳定的。但是,如果我增加数据的出现次数(我必须这样做),xul应用程序需要太长时间才能做出反应,这最终会导致xul崩溃。我认为XUL->插件I/O有点贵!?

到目前为止,我所学到的是,插件能够创建一个组件的新实例:

    // inside myPlugin.cpp
    nsresult rv;
    nsCOMptr< myCompClass > _myComPtr ;
    _myComPtr = do_CreateInstance( "@myDomain.org/DIR/MYCOMPONENT;1", &rv ) ;

函数

    do_CreateInstance( ) ;

来自 nscomponentmanagerutiss .h,它是xulrunner SDK之外的,但它没有像

    do_giveMeTheRunningInstanceOf( "@myDomain.org/DIR/MYDATACREATOR;1", &rv ) ;

我的直觉是使用

    nsScriptablePeer::Invoke(NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result )  

方法将正在运行的dataCreatornsCOMptr传递给插件,使直接通信成为可能,并将xul<-->插件I/O减少到最小。创建另一个dataCreator的实例绝对不是一个选项!

老实说:我不知道如何"转换"NPVariant (args[0])到所需的nsCOMptr,你呢?或者是否有另一种可能性来接收插件内部的指针?

谢谢你的帮助

我不知道如何直接从npapi插件与xulrunner sdk进行交互,因为它们使用完全不同的api。npvariables不能传递xulrunner对象或其他本地指针类型。

这是一个总的头脑风暴,我不知道它是否会工作,但如果你能以某种方式结合xulrunner扩展和npapi插件到同一个模块,你可能会使用全局映射和一个id从插件获得共享内存,但我不知道如果这是可能的或不。

你是正确的,与javascript接口有一个成本;实际上,单个调用的开销最大,因为它们最终是跨进程的。通常,您可以通过使用更有效的调用来最小化这个问题。