gpt4 book ai didi

Firefox [npapi] 插件开发 - firefox 在调用方法时卡住

转载 作者:行者123 更新时间:2023-12-01 11:09:41 28 4
gpt4 key购买 nike

我正在尝试学习如何编写 Firefox 插件。我从 Mozilla 下载了 npruntime 示例,编译并运行了它。从插件中获取属性效果很好,但是当我尝试调用一个方法,Firefox 卡住。我想这个例子可能有问题,所以我写了我自己的基本脚本插件,它有一个属性和一个返回字符串的方法。该属性运行良好,但调用该方法导致 Firefox 再次卡住。

我错过了什么吗?我尝试调试插件,一切似乎都很好。没事调用函数并正确返回值。如果我在 Firefox 挂起时尝试​​停止进程,我会在 Windows DLL 处停止,而不是在我的代码中,也不在 Firefox 代码中。

如果有人能指出我正确的方向......

谢谢。

最佳答案

我希望你已经解决了这个问题。如果情况并非如此,我刚刚发现该示例(我认为那是该死的“npruntime 示例”)存在缺陷。

在返回一个字符串时,该示例使用函数 strdup 分配一个通过 NP_something 方法传递的字符串。事实是 NPAPI 从那时起开始处理分配的字符串,当试图销毁它时,它不能,因为 strdup 使用 malloc 而不是 NPN_MemAlloc.

解决方案是永远不要对我们传递给 NPAPI 函数的对象使用 malloc 或 new。在 npruntime 示例中,错误位于第 452 行:

STRINGZ_TO_NPVARIANT(strdup("foo return val"), *result);

和第 466 行:

STRINGZ_TO_NPVARIANT(strdup("default method return val"), *result);

我已经用这段代码更正了它:

char* src = "foo return val";
char* out = (char *)NPN_MemAlloc(strlen(src) + 1);
strcpy(out, src);
STRINGZ_TO_NPVARIANT(out, *result);

它奏效了。但是有人会认为,样本中的这样一个缺陷应该由 mozilla SDK 维护者来纠正。

关于Firefox [npapi] 插件开发 - firefox 在调用方法时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1431409/

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