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

popup anti-plantage C# ?

1 réponse
Avatar
JC
Bonjour

Mon application est =E9crite en C# et appelle du code Windev (ci-
dessous) par l'interm=E9daire d'un assemblage .Net (par proc=E9dures
globales) cr=E9=E9 depuis Windev. Tout fonctionne tr=E8s bien, MAIS POUR
CELA j'ai du ins=E9rer une popup (qui ne sert =E0 rien) dans le code
Windev pour que l'appel depuis C# ne plante pas. Sans cette popup,
l'appel depuis C# provoque une erreur de "Acces Violation Exception",
genre =E9criture en m=E9moire impossible. Avec cette popup, l'appel
fonctionne tr=E8s bien et on r=E9cup=E8re bien les bonnes donn=E9es. Il y a
s=FBrement une explication logique, mais je ne l'ai pas trouv=E9e.

Comme la proc=E9dure en cause est appel=E9e tr=E8s souvent (quelques
dizaines de fois par minute), cette popup est insupportable et
parasite le fonctionnement de l=92application. Je voudrais donc savoir
comment m=92en passer (sans faire planter l=92appli bien s=FBr), et surtout
comprendre pourquoi cette popup emp=EAche le plantage. Pour info, un =AB
TRACE =BB ne marche pas aussi bien que la popup.

Est-ce que quelqu'un a des id=E9es ?

JC


PROCEDURE choixMusique(nomProfil, distanceMinimale)

tabR=E9sultat est un tableau de 0 cha=EEne
numProfil est un entier


// Recherche de l'Id du profil dont le nom est pass=E9 en param=E8tre de
la proc=E9dure
HLitRecherchePremier(Profil, NomProfil, nomProfil)
// Compte rendu
SI HTrouve()=3DFaux ALORS
Info("La valeur recherch=E9e n'a pas =E9t=E9 trouv=E9e")
RENVOYER tabR=E9sultat
FIN

numProfil =3D Profil.IDProfil

HFiltreIdentique(Musique_Profil,IDProfil, numProfil)

rDistanceCourante est un r=E9el

REQ_ListeCheminsParDistanceEtProfil.valeurDistanceMinimale =3D
distanceMinimale
REQ_ListeCheminsParDistanceEtProfil.numProfil =3D numProfil
// Initialise la requ=EAte
SI PAS HEx=E9cuteRequ=EAte(REQ_ListeCheminsParDistanceEtProfil) ALORS
Erreur("Erreur d'initialisation de la requ=EAte"+RC+HErreurInfo())
RENVOYER tabR=E9sultat
FIN


// =E0 cause d'un bug c=F4t=E9 C# =E0 l'appel de cette fonction, on ajoute =
une
popup qui affiche les =E9tapes
// cette popup FAIT FONCTIONNER l'appel ! Sans elle, C# plante !!!
Info("=E9tape 4")


// lecture du premier enregistrement de la requ=EAte
HLitPremier(REQ_ListeCheminsParDistanceEtProfil)
TANTQUE PAS HEnDehors()
// Traitement sur l'enregistrement de la requ=EAte
TableauAjoute(tabR=E9sultat,
REQ_ListeCheminsParDistanceEtProfil.Chemin)
// lecture de l'enregistrement suivant
HLitSuivant()
FIN
HAnnuleD=E9claration(REQ_ListeCheminsParDistanceEtProfil)


HD=E9sactiveFiltre(Musique_Profil)


RENVOYER tabR=E9sultat

1 réponse

Avatar
STASZEWSKI André
Bonjour,
Essayer de passer par un thread...?
--
Cordialement,
André STASZEWSKI
(Gratuit) Photo Visu et Cut Data Radars sur
http://pagesperso-orange.fr/mdev/
Pour me contacter, cliquez ici :
http://cerbermail.com/?OT0Wnwyzph

"JC" a écrit dans le message de news:

Bonjour

Mon application est écrite en C# et appelle du code Windev (ci-
dessous) par l'intermédaire d'un assemblage .Net (par procédures
globales) créé depuis Windev. Tout fonctionne très bien, MAIS POUR
CELA j'ai du insérer une popup (qui ne sert à rien) dans le code
Windev pour que l'appel depuis C# ne plante pas. Sans cette popup,
l'appel depuis C# provoque une erreur de "Acces Violation Exception",
genre écriture en mémoire impossible. Avec cette popup, l'appel
fonctionne très bien et on récupère bien les bonnes données. Il y a
sûrement une explication logique, mais je ne l'ai pas trouvée.

Comme la procédure en cause est appelée très souvent (quelques
dizaines de fois par minute), cette popup est insupportable et
parasite le fonctionnement de l’application. Je voudrais donc savoir
comment m’en passer (sans faire planter l’appli bien sûr), et surtout
comprendre pourquoi cette popup empêche le plantage. Pour info, un «
TRACE » ne marche pas aussi bien que la popup.

Est-ce que quelqu'un a des idées ?

JC


PROCEDURE choixMusique(nomProfil, distanceMinimale)

tabRésultat est un tableau de 0 chaîne
numProfil est un entier


// Recherche de l'Id du profil dont le nom est passé en paramètre de
la procédure
HLitRecherchePremier(Profil, NomProfil, nomProfil)
// Compte rendu
SI HTrouve()úux ALORS
Info("La valeur recherchée n'a pas été trouvée")
RENVOYER tabRésultat
FIN

numProfil = Profil.IDProfil

HFiltreIdentique(Musique_Profil,IDProfil, numProfil)

rDistanceCourante est un réel

REQ_ListeCheminsParDistanceEtProfil.valeurDistanceMinimale distanceMinimale
REQ_ListeCheminsParDistanceEtProfil.numProfil = numProfil
// Initialise la requête
SI PAS HExécuteRequête(REQ_ListeCheminsParDistanceEtProfil) ALORS
Erreur("Erreur d'initialisation de la requête"+RC+HErreurInfo())
RENVOYER tabRésultat
FIN


// à cause d'un bug côté C# à l'appel de cette fonction, on ajoute une
popup qui affiche les étapes
// cette popup FAIT FONCTIONNER l'appel ! Sans elle, C# plante !!!
Info("étape 4")


// lecture du premier enregistrement de la requête
HLitPremier(REQ_ListeCheminsParDistanceEtProfil)
TANTQUE PAS HEnDehors()
// Traitement sur l'enregistrement de la requête
TableauAjoute(tabRésultat,
REQ_ListeCheminsParDistanceEtProfil.Chemin)
// lecture de l'enregistrement suivant
HLitSuivant()
FIN
HAnnuleDéclaration(REQ_ListeCheminsParDistanceEtProfil)


HDésactiveFiltre(Musique_Profil)


RENVOYER tabRésultat