|
| 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
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)
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
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 |
| |
| |
| | | |
|
| | | | |
| | |
|