gpt4 book ai didi

c++ - 如何将 C++ 对象传递给 NPAPI 插件?

转载 作者:可可西里 更新时间:2023-11-01 11:37:25 25 4
gpt4 key购买 nike

我正在 Windows 上用 C++ 编写一个 NPAPI 插件。当我的插件被实例化时,我想从我的主应用程序向它传递一些私有(private)数据(具体来说,我想向它传递一个指向 C++ 对象的指针)。似乎没有执行此操作的机制。我错过了什么吗?我不能简单地在插件实例中创建我的对象,因为它意味着存在于插件实例的范围之外,并且即使在插件实例被销毁时仍然存在。

编辑:

我正在通过 CEF 使用 C++ 中的嵌入式插件。这意味着我的代码本质上是浏览器和插件。显然,这不是标准 NPAPI 插件的行为方式,因此这可能不受 NPAPI 本身的支持。

最佳答案

您不能将 C++ 对象传递给 javascript;您可以做的是传递一个也是 C++ 对象的 NPObject,并通过 NPRuntime 接口(interface)公开内容。

参见 http://npapi.com/tutorial3获取更多信息。

您可能还想查看 FireBreath框架,大大简化了这样的事情。

编辑:看来我误解了你的问题。您想要的是能够存储链接到插件实例的数据。您需要的是创建插件时提供给您的 NPP; NPP 有两个成员,ndata(netscape 数据)和 pdata(插件数据)。 pdata 指针由您控制——您可以将它设置为指向您想要的任意值,然后在您想要使用它时将其转换回真实类型。当然,一定要将它投回去并在 NPP_Destroy 上删除它。我通常创建一个结构来保存一些信息。 FireBreath 使用它并将所有插件调用发送到插件对象实例中,这样您就可以像普通对象一样操作。

来自 FireBreath 的相关代码示例: https://github.com/firebreath/FireBreath/blob/master/src/NpapiCore/NpapiPluginModule_NPP.cpp#L145

特别注意 NPP_New 和 NPP_Destroy;还要特别注意NPP的pdata成员是如何使用的。

http://npapi.com/tutorial2 中也对此进行了讨论

关于c++ - 如何将 C++ 对象传递给 NPAPI 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7854533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com