Я хотел бы передать массив строк плагину NPAPI. Как преобразовать NPVariant в массив строк?
NPVariant в строковый массив
Ответы (2)
Похоже, вы идете в другом направлении от того, что предложил jldupont. Когда вы передаете массив в качестве параметров свойства или метода:
var arrayData = [1,2,3,4,5];
plugin.someProperty = arrayData;
// -or-
plugin.callSomeMethod(arrayData);
Этот параметр попадет в ваш NPObject как NPVariant типа NPVariantType_Object. Затем вы запрашиваете свойство длины:
NPObject *inObject = val->value.objectValue;
NPVariant npvLength;
NPN_GetProperty(npp, inObject, NPN_GetStringIdentifier("length"), &npvLength);
а затем вы просто выполняете цикл for, чтобы получить все значения:
for (uint32_t i = 0; i < npvLength.value.intValue; i++) {
NPVariant curValue;
NPN_GetProperty(npp, inObject, NPN_GetIntIdentifier(i), &curValue);
// Do something with curValue
}
Точно так же, если вам нужно вернуть массив в javascript, другим вариантом (кроме написания метода для эмуляции объекта, как я предложил в потоке, на который ссылается jldupont) является использование NPN_GetValue для получения NPObject для окна DOM, и затем вызовите «Массив» на нем без параметров. Это вернет пустой объект JS Array (как NPObject*). Затем вы просто перебираете элементы, которые хотите вернуть, и вызываете «push» с элементом в качестве первого (и единственного) параметра.
Надеюсь это поможет
Вы можете использовать NPObject (см. этот поток), чтобы действовать как контейнер для ваших строк (во многом как объект JS с var arrayOfString={...strings here...}
.