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.
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
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)
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.
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
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
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" <jeanclaude.tarby@gmail.com> a écrit dans le message de news:
73aa5064-ed44-4dbd-9ec3-da06c9f52ae1@g19g2000yqc.googlegroups.com...
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.
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
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)
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.
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
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)