Вопрос по обновлению интерфейса NPObject при вызове NPN_InvokeDefault () - PullRequest
0 голосов
/ 17 февраля 2011

Я написал плагин NPAPI для взаимодействия с JavaScript.Мой код JavaScript загружает этот плагин и выполняет асинхронный вызов, предоставляя обратный вызов.Когда обратный вызов (JS) должен быть вызван из моего plug-in, я звоню NPN_InvokeDefault().Параметры, которые я хочу передать JavaScript, включают в себя: NPObject, который я создал и преобразовал в NPVariant, прежде чем перейти к NPN_InvokeDefault(). Мой вопрос заключается в том, кто становится владельцем этого объекта - я отвечаю за освобождениеэтот объект, вызвав NPN_ReleaseVariantValue()?Или это принадлежит Webkit (в контексте JS)?

1 Ответ

1 голос
/ 17 февраля 2011

Вы, вероятно, захотите взглянуть на мою запись в блоге на эту тему: http://npapi.com/memory

Короткий ответ: все, что вы сохраняете под контролем после вызова, вы должны отпустить.Поскольку с InvokeDefault у вас все еще есть контроль над послесловами массива NPVariant, вам необходимо освободить все варианты NPVariant;если код на другой стороне InvokeDefault должен его удерживать, он отвечает за сохранение, копирование и т. д. при необходимости.

Единственное исключение из этого правила состоит в том, что при возврате NPVariant из функции вваш NPObject вы теряете контроль над ним, и браузер несет ответственность за его освобождение;Точно так же все, что браузер возвращает вам из InvokeDefault (возвращаемое значение), вы обязаны освободить.

Надеюсь, это поможет.

...