Pas d'inquiétude, avec PBAdonf, c'est dans la poche ! ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 10-03-2016 09:17:07

kocaine  
Membre Geek
Date d'inscription: 19-04-2013
Messages: 82
Pépites: 397
Banque: 0

[RESOLU] Problème appel à deux librairies

Bonjour,

Dans mon projet nous faisons face à un gros problème, et j'aimerai avoir votre avis:

quand un membre de l'équipe modifie un userobject situé dans une librairie pbl, les fenêtres faisant appel à cet objet depuis une autre librairie crachent un "bad runtime call" même après la récuperation des sources par un "get latest version".

La seule solution qu'on a trouvé et de remodifier la fenêtre appelante en rajoutant une ligne vide.

Pouvez-vous m'indiquer s'il vous plait si vous avez déjà eu ce type de problème et si vous avez une solution pérenne?

Merci

Dernière modification par kocaine (02-06-2016 14:59:46)

Hors ligne

 

#2 10-03-2016 10:08:44

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Problème appel à deux librairies

Comment fonctionne les appels inter-objets en PB :
- tous les userobjects, window, functions, structure ont la même structure d'"objet PB" (oui, on peut faire des structures avec des événements par exemple, même si l'IDE laisse croire le contraire )
- les objets et fonctions qui utilisent des fonctions et méthodes provenant d'autres objets retiennent les liaisons par l'identifiant de l'objet distant et l'index de la méthode dans la liste des méthodes/fonctions. Cette liaison est reconstruite à chaque recompilation / régénération des objets.
- quand on supprime une méthode ou modifie son prototype (liste des arguments), PB supprime le code dans le source de l'objet et ajoute la nouvelle version à la fin. Idem pour la liste des méthodes au début (la portion "forward prototypes"), du coup tous les objets qui appelaient cette fonction si ils ne sont pas regénérés appelleront la méthode suivante dans la liste ce qui aboutira au "bad runtime call" => appel d'une mauvaise fonction à l'éxécution.

Le "get latest version" ne recompile pas forcément tous les objets qui utilisent l'objet modifié, je conseille un "full build" pour être sûr que tout est remis dans l'ordre. C'est pour ça que la modif bidon permet de corriger aussi le problème : ça recompile l'objet.
On peut aussi simplement faire un "regenerate" de l'objet qui appelant, mais il faut respecter la hiérarchie d'appel et ne pas en oublier, le "full" est plus simple.

Bidouille de Jedi : quand on modifie l'api d'un objet, et qu'on veut éviter de devoir tout recompiler (ou juste parce que fout la zone dans l'historique du source control et qu'on veut conserver l'historique de la fonction au lieu de croire qu'on en a créé une nouvelle), ou par exemple si on veut distribuer un .pbd modifié chez un client sans tout lui envoyer : une fois que la modif est faite et l'objet sauvé, on ouvre le source de l'objet et on replace la fonction qui s'est retrouvée à la fin à la bonne place dans la liste. 2 changements à faire : les "forward prototypes" (surtout) et le code correspondant (plus pour le source control).
À manier avec précaution mais ça fonctionne.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#3 11-03-2016 10:27:13

kocaine  
Membre Geek
Date d'inscription: 19-04-2013
Messages: 82
Pépites: 397
Banque: 0

Re: [RESOLU] Problème appel à deux librairies

Merci pour la réponse,

En fait le problème est vraiment lié au fichier dont le prototype a été modifié:

J'ai fait un full build, un get latest, un regenerate (j'ai tout testé vraiment) et quand je regarde en " edit source" je voit bien mes sources modifiées. Par contre dès que je l'ouvre en mode graphique la fonction modifiée a le code d'une autre fonction du userobject.

Je ne comprend plus rien

Hors ligne

 

#4 11-03-2016 12:24:02

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Problème appel à deux librairies

kocaine a écrit:

Par contre dès que je l'ouvre en mode graphique la fonction modifiée a le code d'une autre fonction du userobject.

Je ne comprend plus rien

Mhhh . Quand j'explique que le code d'une nouvelle fonction, ou d'une fonction dont on a modifié la signature, se retrouve en fin du code source, ça ne concerne que la "disposition" du code. Normalement la visualisation de l'objet dans l'IDE PB n'est pas perturbée et elle masque ce changement.

Votre code est versionné? Il n'y aurait pas eu une blague lors du merge d'une modification ?

A ma connaissance, le seul cas où on peut voir un code en édition qui ne correspond pas à ce qui est dans un objet, c'est quand on a des fonctions globales polymorphes : dans le code d'une fonction globale, on met plusieurs corps de fonctions avec le même nom mais avec des paramètres différents (c'est possible en éditant le code source à la main). On n'arrive plus qu'à voir une seule des versions en édition normale (sans passer par "edit source") et pareil en debug : on trace du code qui n'est pas celui exécuté. Ça semblait une bonne idée au départ mais on a remplacé cette technique par des méthodes d'un userobject instancié globalement.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#5 02-06-2016 14:59:31

kocaine  
Membre Geek
Date d'inscription: 19-04-2013
Messages: 82
Pépites: 397
Banque: 0

Re: [RESOLU] Problème appel à deux librairies

Problème résolu en remettant les prototypes dans l'ordre

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22