2011-12-28 7 views
0

Im пытается написать scritable плагин, и я использую пример mozilla ниже в качестве моего руководства, а также глядя на firebreath, чтобы увидеть, как он обертывает код. Я зациклился на возвращаемом значении для javascript.Scriptable Plugin, Javascript возвращает undefined

Mozilla scriptable example

Когда JavaScript называет моя функция Выделяют, HasProperty, HasMethod, Invoke все дозвонились. Я возвращаю результат в Invoke, а переменная javascript - undefined или сбой браузера при изменении результата.

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

ответ

1

STRINGZ_TO_NPVARIANT на самом деле немного опасен; когда вы вставляете строку в объект NPVariant, вы передаете права на эту память в браузере. Однако, если вы не выделили эту память с помощью NPN_MemAlloc, вещи могут взорваться при попытке освободить эту память (возможно, источник вашего сбоя).

Посмотрите, что на самом деле делает STRINGZ_TO_NPVARIANT и не использует его, пока вы не поймете, как это работает; до тех пор вы можете попытаться выполнить шаги вручную, чтобы у вас было лучшее понимание. Выделите память с помощью NPN_MemAlloc, а затем привяжите ее к ней. Держу пари, что это исправляет вашу проблему; после того, как вы выясните, постройте свои собственные встроенные функции или еще что-то, чтобы очистить код.

+0

Спасибо за ответ, я уже просмотрел макрос, и я не вижу ничего плохого в том, как макрос делается проблематично. Но после прочтения здесь: [link] (http://colonelpanic.net/2009/12/memory-management-in-npapi/) [/ link] и с вашими комментариями я не использовал NPN_MemAlloc и скопировал данные во временную строку , '(Температура = NPN_MemAlloc (STRLEN ("Hello World")); тетсру (температура, "Hello World", StrLen ("Hello World")); STRINGZ_TO_NPVARIANT (температура, * результат);)' – hapyfishrmn