4 Stimmen

Aufbau eines Byte-Arrays in PHP mit Varianten?

Ich versuche, ein Byte-Array in PHP zu erstellen, indem ich Varianten . Aber ich scheine es nicht hinzubekommen. Hier ist ein Beispielcode:

$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) ;

Der Code erzeugt einen Fehler:

Fataler Fehler: Ungefangene Ausnahme 'com_exception' mit der Meldung 'Variant Typkonvertierung fehlgeschlagen: Type mismatch.type conversion failed: Typ-Fehlanpassung.

Ich habe es mit allen möglichen Kombinationen für den Variantentyp von http://fi2.php.net/manual/en/com.constants.php

Jede Hilfe ist sehr willkommen!

2voto

Viper_Sb Punkte 1759

(mit PHP 5.3.2)
Müsste es nicht einfach VT_ARRAY heißen? (oder leerer Typ)

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

(HINWEIS: dies gilt auch für das Weglassen von VT_ARRAY, d.h.)

$v = new VARIANT($post);

Druckt 8024 aus. 8024 - 8192 = 12. 12 = VT_VARIANT

Oder übersehe ich hier etwas?

Wenn Sie VT_UI1 verwenden möchten, müssen Sie die Varianten einzeln erstellen, d.h.

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

Aber ich gehe davon aus, dass Sie die erste Möglichkeit wollen.

Dies ist ein Auszug aus dem PHP-Quellcode (PHP 5.3.3) (könnte helfen, ich könnte mich irren)

/* Konvertierung nur durchführen, wenn die Variante nicht bereits vom übergebenen Typ ist */
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)
   */

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X