Pergunta
Eu gostaria de passar uma matriz de seqüências de um plugin NPAPI. Como faço para converter NPVariant para uma matriz de strings?
Solução
Parece que você está indo para o outro diretction do que jldupont sugeriu. Quando você passar uma matriz como um parâmetro para qualquer uma propriedade ou um método:
var arrayData = [1,2,3,4,5];
plugin.someProperty = arrayData;
// -or-
plugin.callSomeMethod(arrayData);
Esse parâmetro irá chegar ao seu NPObject como um NPVariant do tipo NPVariantType_Object. Você, então, consultar a propriedade comprimento:
NPObject *inObject = val->value.objectValue;
NPVariant npvLength;
NPN_GetProperty(npp, inObject, NPN_GetStringIdentifier("length"), &npvLength);
e, em seguida, você acabou de fazer um loop para obter todos os valores:
for (uint32_t i = 0; i < npvLength.value.intValue; i++) {
NPVariant curValue;
NPN_GetProperty(npp, inObject, NPN_GetIntIdentifier(i), &curValue);
// Do something with curValue
}
Se você precisa de retornar um array para javascript, outra opção (além de escrever um método para emular um objeto, como sugeri no segmento que jldupont ligada a) é usar NPN_GetValue para obter o NPObject para o DOM janela, e em seguida, invocar "matriz" nele sem parâmetros. Isto irá devolver um objeto Array JS vazio (como um NPObject *). Então você acabou de percorrer os itens que você deseja retornar e chamada "push" com o item como o parâmetro primeiro (e único).
Espero que isso ajude
Outras dicas
Você pode usar um NPObject (ver este href="http://groups.google.com/group/mozilla.dev.tech.plugins/browse_thread/thread/70bfc090f64a86d2" rel="nofollow noreferrer"> fio ) para agir como um recipiente para suas cordas (muito parecido com um objeto JS com var arrayOfString={...strings here...}
.