Paramètres entrée sortie de commandes

J’ai encore ouvert la BAB () en essayant d’utiliser des objets ou des collections comme paramètres d’une commande :
<code 4D>
C_OBJET($test_o)
C_ENTIER LONG($temp_l)
$test_o:=Créer objet(“left”;$temp_l;“top”;$temp_l;“right”;$temp_l;“bottom”;$temp_l)
OBJET LIRE COORDONNÉES(
;$objetForm_t;$test_o.left;$test_o.top;$test_o.right;$test_o.bottom)
</code 4D>
Ligne 4, erreur : “il manque une variable”
Ai-je tenté le truc parfaitement idiot ou bien n’est-ce qu’une limitation actuelle susceptible de changer plus tard ?

(*) boite à baffes

Ça n’inspire personne ? Suis-je seul à avoir tenté ça ? J’ai cherché dans la doc sans trouver mention de cette limitation, peut-être n’ai-je pas cherché où il faut.

J’ai trouvé ça :

: Doc 4D

Lorsque des expressions d’un type donné sont attendues dans votre
code 4D, vous pouvez vous assurer qu’elles auront le type souhaité
même en cas de valeur Indéfinie en les encadrant avec la commande de
transtypage 4D appropriée : Chaine, Num, Heure, Date, Bool. Ces
commandes retournent une valeur vide du type spécifié lorsque
l’expression est évaluée à Indéfinie. Par exemple :

https://doc.4d.com/4Dv17/4D/17/Utiliser-la-notation-objet.300-3730698.fr.htmlICI>

A tester…
si ça fonctionne :?:, il faut le savoir et c’est tout de suite moins jolie et plus verbeux…

: Manuel PIQUET

A tester…
J’ai essayé :
$test_o.left:=Ent(Num(“0”))
avant de passer $test_o.left, même sanction. Dommage. À dire vrai je n’en attendais pas grand chose, vu que dans mon test initial chaque item de l’objet est une copie d’un entier long. Le transtypage, je pense, ne change rien au contenu de l’objet, il n’a de rôle qu’en fonction du type de variable située à gauche du ":=$monObjet.propriété ".

: Arnaud DE MONTARD

J’ai essayé : […]
… et même ça (genre je m’acharne) :
<code 4D>
C_ENTIER LONG($temp_l)
$test_o:=Créer objet(“left”;$temp_l;“top”;$temp_l;“right”;$temp_l;“bottom”;$temp_l)
C_POINTEUR($obj_p)
$obj_p:=->$test_o
OBJET LIRE COORDONNÉES(*;$par_t;$obj_p->left;$obj_p->top;$obj_p->right;$obj_p->bottom)
</code 4D>
Loupé, c’était couru.
J’vais pas surfer aujourd’hui…j’ai l’impression que l’océan ne me veut pas.

Au départ, je pensais plus à cela (toujours pas testé pas le temps sorry… :oops:)

<code 4D>
OBJET LIRE COORDONNÉES(*;$objetForm_t;Num($test_o.left);Num($test_o.top);Num($test_o.right);Num($test_o.bottom))

</code 4D>

Inutile d’essayer, si 4D accepte le résultat d’une fonction en paramètre d’entrée, elle ne peut être une variable de sortie.

Oups :oops: j’avais mal lu ta commande, j’avais pas vu que c’était un paramètre de sortie, je pensais à un fixer pas un lire… :frowning:

Ça marche avec un fixer :?:

: Manuel PIQUET

Ça marche avec un fixer :?:
Je ne comprends pas, mais encore ?

je voulais juste savoir si cela fonctionnait (comme je n’ai rien testé :oops:):
<code 4D>
OBJET FIXER COORDONNÉES(*;$objetForm_t;Num($test_o.left);Num($test_o.top);Num($test_o.right);Num($test_o.bottom))

</code 4D>

voir même directement ça ?
<code 4D>
OBJET FIXER COORDONNÉES(*;$objetForm_t;$test_o.left;$test_o.top;$test_o.right;$test_o.bottom)

</code 4D>

: Manuel PIQUET

je voulais juste savoir si cela fonctionnait (comme je n’ai rien testé)
À défaut de tester, tu peux le savoir en lisant ce qui précède et me croire sur parole :lol:

Bertrand a proposé https://forums.4d.com/Post/FR/28217988/1/28221139#28220002sur un autre fil> de lubrifier avec parenthèses :
OBJET FIXER COORDONNÉES(*;$objetForm_t;($test_o.left);($test_o.top);($test_o.right);($test_o.bottom))
Pas mieux :frowning:

J’ai tenté 2 types de paramètre E/S qui ne soient pas des entiers, des fois que…

• numérique
<code 4D>
$vol_t:=“Macintosh HD”
C_OBJET($prop_o)
C_RÉEL($real_r)
$prop_o:=Créer objet(“size”;$real_r;“used”;$real_r;“free”;$real_r)
PROPRIÉTÉS DU VOLUME($vol_t;$size;$used;$free)
PROPRIÉTÉS DU VOLUME($vol_t;$prop_o.size;$prop_o.used;$prop_o.free) //#erreur
</code 4D>

• texte
<code 4D>
C_TEXTE($alias_t;$cible_t)
$alias_t:=Convertir chemin POSIX vers système("/Users/arnaud/Devs/___ajeter")
C_OBJET($chemin_o)
$chemin_o:=Créer objet(“alias”;"";“cible”;"")
$chemin_o.alias:=$alias_t
RÉSOUDRE ALIAS($alias_t;$cible_t)
RÉSOUDRE ALIAS($chemin_o.alias;$cible_t)
RÉSOUDRE ALIAS($alias_t;$chemin_o.cible) //#erreur
RÉSOUDRE ALIAS($alias_t;($chemin_o.cible)) //#erreur
</code 4D>

Bref, quel que soit x, ça semble pas dans les gènes de 4D.

Bonjour Arnaud

As tu essayer avec ob get($test_o;“left”;Is longint) ?

A+
Didier

Ça fait comme Num, “il manque une variable”. Logique, une fonction retourne une valeur mais n’est pas une variable.

Bonjour,

C’est un défaut de jeunesse de la notation objet àmha. Ça devrait s’arranger à l’avenir.

De la même façon, certaines commandes avec des paramètres de sortie n’acceptent pas qu’on passe un pointeur dépointe, d’autres si.

En attendant, si on veut alimenter un objet, c’est sur que ça fait plus de lignes.

: Stanislas CARON

C’est un défaut de jeunesse de la notation objet àmha. Ça devrait
s’arranger à l’avenir.
C’est aussi ce que je pense. Reste que pour une limitation parfaitement légitime, comme souvent chez 4D on préfère rester coi : rien dans la doc, rien sur le forum, débrouillez vous.