Умм ... правильно? Вы не предоставили пример кода и не объяснили, как вы распределяете свой NPVariant; это очень трудно помочь тебе, мой друг.
В основном вам просто нужно создать NPVariant, выделить для него достаточно памяти, используя NPN_MemAlloc , и назначить указатель на поле UTF8Characters NPString внутри объединения NPVariant и длины к длине UTF8.
Убедитесь, что вы распределили память и скопировали свою строку; если вы пытаетесь передать в память из std :: string или чего-то еще, что он, вероятно, освобождается перед его использованием, что может легко вызвать проблемы. Также не забудьте выделить дополнительный байт в конце строки для символа NULL - помните, что строки C заканчиваются NULL, и хотя спецификация NPAPI говорит, что вам просто нужно установить UTF8Length, я все еще видел случаи, когда Firefox в частности, ожидает строку с завершающей строкой NULL и ведет себя странно, если вы ее не дадите.
Если вы хотите пойти по этому пути, вам может пригодиться этот пост в блоге:
Однако могу ли я предложить более простой маршрут? Написание плагина NPAPI - непростая задача, и для того, чтобы сделать это хорошо и безопасно, требуется большой опыт и исследования. Если вы используете FireBreath , вы можете писать плагины NPAPI на платформе C ++, которая уже делает все это для вас и позволяет использовать обычные типы данных C ++ STL, работает на нескольких платформах и, как правило, экономит массу времени и средств. хлопот.
Для получения небольшой информации о подходе, используемом FireBreath со сценариями, см. мой пост на тему .