PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Fuite de mémoire lors du pilotage de Word 2019
Fuite de mémoire lors du pilotage de Word 2019
Iniciado por florian.vandemert, 27,feb. 2020 10:37 - 2 respuestas
Publicado el 27,febrero 2020 - 10:37
Bonjour,
J'essaye actuellement de récupérer du texte d'un fichier Word (Qu'il soit .doc, .docx, .odt, etc...) et j'ai remarqué que même après fermeture du document, Word reste ouvert en mémoire et, pire, s'accumule au fil des executions de mon programme.

Comment puis-je fermer Word définitivement, ou au moins empêcher qu'il ne s'accumule en mémoire ?

Merci d'avance pour vos réponses,
Florian

PS: Le code de la procédure =>
Procedure PRIVÉE GLOBALE ConvertirWord(pChemin est une chaîne UNICODE) : chaîne UNICODE
tTexteComplet est chaîne
tAutomateObject est un objet OLE dynamique
tCheminTemp est une chaîne UNICODE

//Ici démarre l'utilisation de Word
tAutomateObject = allouer un objet OLE "Word.Application"
tAutomateObject>>Visible = OLEFaux
tAutomateObject = tAutomateObject>>Documents>>Open(tCheminTemp, OLETrue)
tTexteComplet = tAutomateObject>>Range>>Text
tAutomateObject>>Close(OLEFaux, OLEFaux, OLEFaux)
//Ici, ça plante (Code 80010108)
QUAND EXCEPTIONEXCEPTION DANS
tAutomateObject>>Quit()
FAIRE
Info(ExceptionInfo(errComplet))
FIN
SI tCheminTemp <> pChemin ALORS
fSupprime(tCheminTemp)
FIN
Libérer tAutomateObject
RENVOYER tTexteComplet
Miembro registrado
962 mensajes
Publicado el 28,febrero 2020 - 08:57
hello,
le problème vient de cette ligne :
tAutomateObject = tAutomateObject>>Documents>>Open(tCheminTemp, OLETrue)

tu réaffectes tAutomateObject à un autre objet donc quand tu fais le Quit ce n'est plus sur l'objet "Word.Application"
Tu peux faire comme ceci :
tTexteComplet est chaîne
tAutomateObject est un objet OLE dynamique
tCheminTemp est une chaîne UNICODE

//Ici démarre l'utilisation de Word
tAutomateObject = allouer un objet OLE "Word.Application"
tAutomateObject>>Visible = OLEFaux
tAutomateObject>>Documents>>Open(tCheminTemp, OLETrue)
tTexteComplet = tAutomateObject>>ActiveDocument>>Range>>Text
tAutomateObject>>ActiveDocument>>Close(OLEFaux, OLEFaux, OLEFaux)

QUAND EXCEPTIONEXCEPTION DANS
tAutomateObject>>Quit()
FAIRE
Info(ExceptionInfo(errComplet))
FIN
SI tCheminTemp <> pChemin ALORS
fSupprime(tCheminTemp)
FIN
Libérer tAutomateObject


--
Ami calmant, J.P
Publicado el 02,marzo 2020 - 13:53
Merci beaucoup !
J'avais, par alternative, créé un 2ème objet OLE dans lequel j'assignais le résultat de mon "Open". Mais ta solution me semble bien plus propre au niveau de la gestion des ressources.

Bonne journée,
Florian VM