PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Renvoyer un objet dynamique
Renvoyer un objet dynamique
Débuté par Frédéric LAMBOUR, 06 oct. 2005 14:53 - 3 réponses
Posté le 06 octobre 2005 - 14:53
A priori WD9 ne permet plus à une fenêtre de renvoyer un objet dynamique
(contrairement à WD5)
Après migration je reçoie null et l'appli plante avec un message :
Erreur à la ligne 47 du traitement Méthode oLanceInterfaceEPC.
La fonction Ouvre aurait dû renvoyer une valeur.
....

Peut-on contourner le pb par une syntaxe particulière ou dois-je passer par
un autre moyen pour obtenir des objets dynamique instancier dans des
fenêtres
Posté le 06 octobre 2005 - 19:31
Frédéric LAMBOUR a écrit :
A priori WD9 ne permet plus à une fenêtre de renvoyer un objet dynamique
(contrairement à WD5)
Après migration je reçoie null et l'appli plante avec un message :
Erreur à la ligne 47 du traitement Méthode oLanceInterfaceEPC.
La fonction Ouvre aurait dû renvoyer une valeur.
...

Peut-on contourner le pb par une syntaxe particulière ou dois-je passer par
un autre moyen pour obtenir des objets dynamique instancier dans des
fenêtres


Bonjour
C'est normal
Le compilateur WD9, nettemeent plus efficace, réagit enfin à ce problème
pouvant causer des erreur.

En effet, comment renvoyer l'adresse d'un élément alors qu'il vien
d'être libéré ?
Explication : la portée de votre objet dynamique, s'il est décrit pour
la fenêtre... et limité à celle ci.
Ainsi, en fermeture l'objet est automatiquement libéré et n'est donc
plus accessible, d'ou le NULL.

J'ai, cet été trouvé le moyen de dupliquer une instance.
En utilisant la notion de chemin des variable décrite dans le document
cité en fin de post, vous deviez alors être capable de copier l'instance
dans un objet dynamique d'une autre fenêtre...


Dans la fermeture de votre code faire comme suit.
la fenêtre contien un objet oTotoLocal
La fenêtre appelante est disponible via FenPrecedente()
S'assurer qu'elle comporte un objet dynamique global nommé oToto

// fermeture de la fenêtre
// on affecte l'objet de la fenêtre appelante avec l'instance de notre
fenêtre
{Fenprecedante()+".oToto",invariable} = oTotoLOcal

De retour dans la fenêtre appelante : oToto sera affecté de la copie de
l'objet !

Références :
"Programmation des variables et des champs" paragraphe "chemin des données"
http://www.wdforge.org/modules/icontent/index.php…

FAQ : "le ->this() en WinDev"
http://www.wdforge.org/modules/smartfaq/faq.php…

++ R&B
Posté le 07 octobre 2005 - 12:57
Vous dites :
Le compilateur WD9, nettemeent plus efficace, réagit enfin à ce problème
pouvant causer des erreur.


Néamoins mon code fonctionnait à merveille en WD55. Je vais utiliser un
autre moyen beaucoup simple pour résoudre ce énième problème de migration :

Utiliser un paramètre de sortie exemple :

oTest est un objet Test dynamique

ouvre(GetTest, oTest)

Ce code remplacera

oTest est un objet Test dynamique

oTest = ouvre(GetTest)


"Romuald Besset" <info@wdforge.org> a écrit dans le message de
news:43452f13$1@news.pcsoft.fr...

Frédéric LAMBOUR a écrit :
A priori WD9 ne permet plus à une fenêtre de renvoyer un objet dynamique
(contrairement à WD5)
Après migration je reçoie null et l'appli plante avec un message :
Erreur à la ligne 47 du traitement Méthode oLanceInterfaceEPC.
La fonction Ouvre aurait dû renvoyer une valeur.
...

Peut-on contourner le pb par une syntaxe particulière ou dois-je passer

par
un autre moyen pour obtenir des objets dynamique instancier dans des
fenêtres


Bonjour

C'est normal
Le compilateur WD9, nettemeent plus efficace, réagit enfin à ce problème
pouvant causer des erreur.

En effet, comment renvoyer l'adresse d'un élément alors qu'il vien
d'être libéré ?
Explication : la portée de votre objet dynamique, s'il est décrit pour
la fenêtre... et limité à celle ci.
Ainsi, en fermeture l'objet est automatiquement libéré et n'est donc
plus accessible, d'ou le NULL.

J'ai, cet été trouvé le moyen de dupliquer une instance.
En utilisant la notion de chemin des variable décrite dans le document
cité en fin de post, vous deviez alors être capable de copier l'instance
dans un objet dynamique d'une autre fenêtre...


Dans la fermeture de votre code faire comme suit.
la fenêtre contien un objet oTotoLocal
La fenêtre appelante est disponible via FenPrecedente()
S'assurer qu'elle comporte un objet dynamique global nommé oToto

// fermeture de la fenêtre
// on affecte l'objet de la fenêtre appelante avec l'instance de notre
fenêtre
{Fenprecedante()+".oToto",invariable} = oTotoLOcal

De retour dans la fenêtre appelante : oToto sera affecté de la copie de
l'objet !

Références :
"Programmation des variables et des champs" paragraphe "chemin des

données"
Posté le 07 octobre 2005 - 13:06
Frédéric LAMBOUR a écrit :
Vous dites :

Le compilateur WD9, nettemeent plus efficace, réagit enfin à ce problème
pouvant causer des erreur.


Néamoins mon code fonctionnait à merveille en WD55. Je vais utiliser un
autre moyen beaucoup simple pour résoudre ce énième problème de migration :

Utiliser un paramètre de sortie exemple :

oTest est un objet Test dynamique

ouvre(GetTest, oTest)

Ce code remplacera

oTest est un objet Test dynamique

oTest = ouvre(GetTest)



Oui c'est effectivement plus efficace et précis.
++ R&B