2010-09-10 6 views
4

J'essaie de construire un tableau d'octets en PHP en utilisant Variants. Cependant, je n'arrive pas à le faire fonctionner. Voici un exemple de code:Construire un tableau d'octets en PHP avec des variantes?

$ie = new COM("InternetExplorer.Application"); 

$ie->Visible = true; 
$ie->Height = 500 ; 
$ie->Width  = 700 ; 

$post = array (ord('p'),ord('='),ord('1')) ; 
$v = new VARIANT($post, VT_ARRAY|VT_UI1); 

$ie->Navigate2("http://host/web/echo_request.php",0,'',$v) ; 

Le code produit une erreur:

Fatal error: Uncaught exception 'com_exception' with message 'Variant type conversion failed: Type mismatch.type conversion failed: Type mismatch.

J'ai essayé avec toutes sortes de combinaisons pour le type variant de http://fi2.php.net/manual/en/com.constants.php

Toute aide est grandement appréciée!

Répondre

2

(avec PHP 5.3.2)
Ne serait-ce pas simplement VT_ARRAY? (Ou type vide)

$post = array (ord('p'),ord('='),ord('1')); 
$v = new VARIANT($post, VT_ARRAY); 
print variant_get_type($v); 

(REMARQUE: ne laissant ainsi VT_ARRAY sortir par exemple)

$v = new VARIANT($post); 

Imprime 8024. 8024-8192 = 12. 12 = VT_VARIANT

Ou suis Il me manque quelque chose ici?

Si vous souhaitez utiliser VT_UI1 vous devez créer les variantes i.e. individuellement

$v = new VARIANT(ord('p'), VT_UI1); 

Mais je suppose que vous êtes désireux de la première manière.

Ceci est à partir du code source PHP (PHP 5.3.3) (peut aider, je pourrais être loin)

/* Only perform conversion if variant not already of type passed */
if ((ZEND_NUM_ARGS() >= 2) && (vt != V_VT(&obj->v))) {

/* If already an array and VT_ARRAY is passed then: 
     - if only VT_ARRAY passed then do not perform a conversion 
     - if VT_ARRAY plus other type passed then perform conversion 
     but will probably fail (origional behavior) 
    */ 
+1

Merci pour la réponse. Cependant, je ne peux toujours pas le faire fonctionner. Cela produit une erreur "Le paramètre est incorrect", qui je pense provient de la fonction .NET réelle et pas de PHP. Les extraits de code que j'ai essayés: '$ variant = new VARIANT (array());' et variant $ = new VARIANT (array (nouveau VARIANT (ord ('p'), VT_UI1))); '. Des idées? – Tower

+1

Le code $ variant = new VARIANT (array()); serait erreur parce que tableau est vide, si vous voulez une variante vide, vous le feriez simplement sans le tableau(). $ variant = new VARIANT(); Quel segment vous donne l'erreur? –

+0

@Viper_Sb cela vous dérangerait-il de m'aider avec cette question que j'ai posée ici http://stackoverflow.com/questions/42189245/how-to-pass-an-array-of-bytes-reference-to-a-com-object- méthode, j'apprécierai volontiers votre aide. –

Questions connexes