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?

Foi útil?

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...}.

scroll top