2011-12-28 24 views
0

我试图编写一个scritable插件,我使用mozilla的例子作为我的指南,以及看firebreath看它如何包装代码。我陷入了JavaScript的返回值。脚本插件,Javascript返回undefined

Mozilla scriptable example

当JavaScript调用我的功能分配,HasProperty,HasMethod,调用所有被调用。我返回Invoke中的结果,并且在修改结果时,javascript变量是undefined或崩溃浏览器。

STRINGZ_TO_NPVARIANT(_strdup("Hello World"), *result); 

回答

1

STRINGZ_TO_NPVARIANT实际上有点危险;当你将一个字符串放入一个NPVariant对象时,你将该内存的所有权交给浏览器。但是,如果您没有使用NPN_MemAlloc分配该内存,那么当它尝试释放该内存时(可能是崩溃的来源),可能会发生爆炸。

看看STRINGZ_TO_NPVARIANT实际上在做什么,不要使用它,直到你明白它是如何工作的;在此之前,您可以尝试手动执行这些步骤,以便更好地理解。使用NPN_MemAlloc分配内存,然后将字符串strcpy分配给它。我敢打赌,这可以解决你的问题;在你知道了之后就想出了构建你自己的内联函数或者不需要再次清理代码的东西。

+0

感谢您的回应,我已经看过宏,我没有看到有问题的宏是如何做错的。但在阅读这里后:[链接](http://colonelpanic.net/2009/12/memory-management-in-npapi/)[/链接]和您的意见我没有使用NPN_MemAlloc并将数据复制到一个临时字符串。 '(TEMP = NPN_MemAlloc(strlen的(的 “Hello World”)); 的memcpy(温度, 的 “Hello World”, 的strlen(的 “Hello World”)); STRINGZ_TO_NPVARIANT(温度, *结果);)' – hapyfishrmn 2012-01-04 14:26:35