Difficultes avec les Objets COM (ActiveX)

Le
Amarth Isilme
Bonjour,

J'ai actuellement un petit problème avec les manipulations d'activeX
avec PHP :
Les bugs #33734 et #44578 sur bugs.php.net représentent parfaitement
le problème que j'ai.
Il est dit dans le bug #33734 que le problème est sensé être résolu
depuis la version 5.1.0 mais je suis à la version 5.2.5 et je
rencontre néanmoins le problème.

Voici le code :


<?php
// Creation de l'objet COM $obj_persist
$obj_persist = new COM("PERSIST.PersistCtrl.1")or die("Error");
$obj_appli = $obj_persist->Applications->Add($path);
$obj_unite = $obj_appli->Units->Add("foo");
$obj_instance = $obj_unite->objects->add($nom_instance);
$sous_objet = $obj_instance->collection("Objects");
$propriete = $sous_objet->Item("alm");
echo "Label Value : " . $propriete->Value("Label",0); //Renvoie la
bonne valeur => OK en lecture


// Ecriture Test 1
$propriete->Value("Label",0) = "Nouveau libellé";
// Fatal Error

//Ecriture Test 2
$propriete->Value["Label",0] = "Nouveau libellé";
// Invalid number of parameters.

Résultat Attendu:
-
J'ai essayé de plusieurs façons d'écrire dans la propriété $propriete-
>Value["Label",0]. Avec des parenthèses, des crochets, et même un mix
des deux. Impossible d'écrire la valeur.
J'ai également essayé avec VBa, ça marche sans le moindre problème
avec le code suivant.

Dim SsObjs as PrsCollObjects
Set SsObjs = MyInst.Collection("Objects")
Set MyObject = SsObjs.Item("Fault")
MyObject.Value("Label", 0) = "Défaut pompe 1"

Résultat actuel:
--
Résultat TEST 1 avec () :

Fatal error: Can't use method return value in write context in
C:wampwwwTest COMindex.php on line 71

Résultat TEST 2 avec [] :

Fatal error: Uncaught exception 'com_exception' with message 'Error
[0x8002000e] Nombre de param?tres non valide. ' in C:wampwwwTest
COMindex.php:69 Stack trace: #0 C:wampwwwTest COMindex.php(69):
unknown() #1 {main} thrown in C:wampwwwTest COMindex.php on line
69

Selon la façon d'ecrire ma commande, j'ai aussi parfois le message
d'erreur suivant :
"Unexpected ','" error.

Est-ce que ça inspire quelqu'un ?

Cordialement.

Amarth Isilme.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #1976941
Bonjour,


J'ai actuellement un petit problème avec les manipulations d'activeX
avec PHP :


Je n'y connais strictement rien, alors ma réponse sera au ras des
paquerettes de la syntaxe de PHP.

// Ecriture Test 1
$propriete->Value("Label",0) = "Nouveau libellé";
// Fatal Error


Ici, tu sembles vouloir appeler une fonction, puis écraser la valeur
de retour (quelle qu'elle soit) par la chaîne de caractères "Nouveau
libellé" qui, d'ailleurs, n'est pas transmise à la fonction.

//Ecriture Test 2
$propriete->Value["Label",0] = "Nouveau libellé";
// Invalid number of parameters.


Et là tu sembles vouloir redéfinir la syntaxe d'accès aux valeurs de
type tableau.

Résultat Attendu:
----------------
J'ai essayé de plusieurs façons d'écrire dans la propriété $propriete-
Value["Label",0]. Avec des parenthèses, des crochets, et même un mix
des deux. Impossible d'écrire la valeur.



Je suppose que tu n'as pas inventé le nom « Value » qui est censé se
trouver dans $propriete. Alors jette un coup d'½il à la doc qui le
définit, et regarde si c'est une fonction, ou un tableau de tableaux,
ou quoi que ce soit d'autre. Par ailleurs, il existe sûrement des
exemples dont tu pourrais t'inspirer avec profit.


Cordialement,
--
Olivier Miakinen


Amarth Isilme
Le #1993001
Bonjour,


// Ecriture Test 1
$propriete->Value("Label",0) = "Nouveau libellé";
// Fatal Error
Ici, tu sembles vouloir appeler une fonction, puis écraser la valeur

de retour (quelle qu'elle soit) par la chaîne de caractères "Nouveau
libellé" qui, d'ailleurs, n'est pas transmise à la fonction.


La question que je me pose, c'est pourquoi l'équivalent en VBa
fonctionne correctement :
MyObject.Value("Label", 0) = "Défaut pompe 1" ne retourne pas
d'erreur et assigne bien la valeur "Défaut Pompe 1" au libellé de mon
objet (MyObject.Value("Label", 0))



//Ecriture Test 2
$propriete->Value["Label",0] = "Nouveau libellé";
// Invalid number of parameters.
Et là tu sembles vouloir redéfinir la syntaxe d'accès aux valeurs de

type tableau.
J'ai testé ici différentes syntaxes car j'ai lu dans les bugs de PHP,

que certaines versions (>5.0.4 il me semble) ne prenaient plus en
compte les formes d'ecriture du type ()= et avaient été remplacées par
[]=.
Les tests ont été cependant infructueux.




Résultat Attendu:
----------------
J'ai essayé de plusieurs façons d'écrire dans la propriété $propriete->Value["Label",0]. Avec des parenthèses, des crochets, et même un mix
des deux. Impossible d'écrire la valeur.


Je suppose que tu n'as pas inventé le nom « Value » qui est censé se
trouver dans $propriete. Alors jette un coup d'½il à la doc qui le
définit, et regarde si c'est une fonction, ou un tableau de tableaux,
ou quoi que ce soit d'autre. Par ailleurs, il existe sûrement des
exemples dont tu pourrais t'inspirer avec profit.


Le code en VB qui est dans mon premier message est directement tiré de
la maigre documentation à ma disposition.
J'ai essayé de traduire tant bien que mal ce code en PHP, et je bute
sur la partie MyObject.Value("Label", 0) = "Défaut pompe 1" que j'ai
traduite par $propriete->Value("Label",0) = "Nouveau libellé";.
J'accède bien à $propriete->Value("Label",0) en lecture mais
l'écriture provoque invariablement une "Fatal Error".

Cordialement et merci pour ta réponse,

Amarth Isilme


Publicité
Poster une réponse
Anonyme