Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Difficultes avec les Objets COM (ActiveX)

2 réponses
Avatar
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:\wamp\www\Test COM\index.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:\wamp\www\Test
COM\index.php:69 Stack trace: #0 C:\wamp\www\Test COM\index.php(69):
unknown() #1 {main} thrown in C:\wamp\www\Test COM\index.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.

2 réponses

Avatar
Olivier Miakinen
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


Avatar
Amarth Isilme
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