Discussion:
Difficultes avec les Objets COM (ActiveX)
(trop ancien pour répondre)
Amarth Isilme
2008-03-31 18:01:26 UTC
Permalink
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.
Olivier Miakinen
2008-04-01 07:11:20 UTC
Permalink
Bonjour,
Post by Amarth Isilme
J'ai actuellement un petit problème avec les manipulations d'activeX
Je n'y connais strictement rien, alors ma réponse sera au ras des
paquerettes de la syntaxe de PHP.
Post by Amarth Isilme
// 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.
Post by Amarth Isilme
//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.
Post by Amarth Isilme
----------------
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
2008-04-01 17:46:31 UTC
Permalink
Bonjour,
Post by Olivier Miakinen
Post by Amarth Isilme
// 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))
Post by Olivier Miakinen
Post by Amarth Isilme
//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.
Post by Olivier Miakinen
Post by Amarth Isilme
----------------
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

Continuer la lecture sur narkive:
Loading...