J'utilise ctypes pour activer une dll écrite en C qui effectue des
calculs complexes pour évaluer la déclinaison magnétique en fonction de
la latitude et de la longitude.
J'ai trouvé la fonction qui charge et active la fonction exportée de ma
dll et cela fonctionne bien, MAIS je cherche la fonction de libération
de la dll !
Le chargement et l'accès à la dll se fait dans une fonction python de
cette manière :
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MCI, Shadok Gouroudoudou
Bonsoir !
A priori, je pense que la DLL reste en mémoire. Ma supposition est basée sur la pléthore d'utilitaires dont la fonction est de décharger de la mémoire les DLL plus utilisées.
PS : je parle pour windows, bien sûr.
-- @-salutations
Michel Claveau
Bonsoir !
A priori, je pense que la DLL reste en mémoire. Ma supposition est
basée sur la pléthore d'utilitaires dont la fonction est de décharger
de la mémoire les DLL plus utilisées.
A priori, je pense que la DLL reste en mémoire. Ma supposition est basée sur la pléthore d'utilitaires dont la fonction est de décharger de la mémoire les DLL plus utilisées.
PS : je parle pour windows, bien sûr.
-- @-salutations
Michel Claveau
Jacques Picard
Bonsoir !
A priori, je pense que la DLL reste en mémoire. Ma supposition est basée sur la pléthore d'utilitaires dont la fonction est de décharger de la mémoire les DLL plus utilisées.
PS : je parle pour windows, bien sûr.
Merci pour cette info !
@+
Bonsoir !
A priori, je pense que la DLL reste en mémoire. Ma supposition est basée
sur la pléthore d'utilitaires dont la fonction est de décharger de la
mémoire les DLL plus utilisées.
A priori, je pense que la DLL reste en mémoire. Ma supposition est basée sur la pléthore d'utilitaires dont la fonction est de décharger de la mémoire les DLL plus utilisées.
PS : je parle pour windows, bien sûr.
Merci pour cette info !
@+
Pierre Maurette
Bonjour à tous,
J'utilise ctypes pour activer une dll écrite en C qui effectue des calculs complexes pour évaluer la déclinaison magnétique en fonction de la latitude et de la longitude. J'ai trouvé la fonction qui charge et active la fonction exportée de ma dll et cela fonctionne bien, MAIS je cherche la fonction de libération de la dll ! Le chargement et l'accès à la dll se fait dans une fonction python de cette manière :
QUESTION est-ce que la dll est libérée en quittant la fonction ?
Elle le sera à coup sûr à la fin du processus qui l'a chargée. Même si Python est en intermédiaire, c'est le kernel de Windows qui s'occupe des DLLs. En gros, la DLL est chargée à la première demande est un compteur de processus utilisateurs est incrémenté à chaque nouvelle demande. Ce compteur est décrémenté soit quand un processus le demande spécifiquement, soit quand il se ferme. Le compteur arrivé à 0,la DLL est déchargée. Les fonctions Windows courantes sont LoadLibrary(), GetProcAddress() et FreeLibrary(). Vous pourriez utiliser FreeLibrary() (sans doute avec windll.FreeLibrary(), ou peut-être windll.kernel32.FreeLibrary(). Mais il vous faut envoyer le handle récupéré par LoadLibrary(), et vous allez vous compliquer la vie, soit à tout faire à la main, soit à utiliser GetModuleHandle(). Je n'ai jamais utilisé ces techniques sous Python (à priori, mais ça peut changer, Python est mon langage "un seul code pour toutes les plateformes"), mais je ne vois pas pourquoi il en irait pour une DLL différemment des autres ressources, c'est à dire géré au mieux au travers du GC. Est-ce important de savoir s'il va compter sur le cache et utiliser LoadLibrary()/FreeLibrary() souvent, ou garder l'objet tant que la fonction peut être appelée ? Ne pouvez-vous pas faire confiance à Python ? Vous pouvez voir ce qui se passe en utilisant un utilitaire quelconque, par exemple un truc de Sysinternals (racheté par Microsoft, tiens...). Voyez ListDLLs à cette page: <URL:http://www.microsoft.com/technet/sysinternals/Processesandthreadsutilities.mspx?wt.svlþatured>
-- Pierre Maurette
Bonjour à tous,
J'utilise ctypes pour activer une dll écrite en C qui effectue des calculs
complexes pour évaluer la déclinaison magnétique en fonction de la latitude
et de la longitude.
J'ai trouvé la fonction qui charge et active la fonction exportée de ma dll
et cela fonctionne bien, MAIS je cherche la fonction de libération de la dll
!
Le chargement et l'accès à la dll se fait dans une fonction python de cette
manière :
QUESTION est-ce que la dll est libérée en quittant la fonction ?
Elle le sera à coup sûr à la fin du processus qui l'a chargée. Même si
Python est en intermédiaire, c'est le kernel de Windows qui s'occupe
des DLLs.
En gros, la DLL est chargée à la première demande est un compteur de
processus utilisateurs est incrémenté à chaque nouvelle demande. Ce
compteur est décrémenté soit quand un processus le demande
spécifiquement, soit quand il se ferme. Le compteur arrivé à 0,la DLL
est déchargée.
Les fonctions Windows courantes sont LoadLibrary(), GetProcAddress() et
FreeLibrary(). Vous pourriez utiliser FreeLibrary() (sans doute avec
windll.FreeLibrary(), ou peut-être windll.kernel32.FreeLibrary(). Mais
il vous faut envoyer le handle récupéré par LoadLibrary(), et vous
allez vous compliquer la vie, soit à tout faire à la main, soit à
utiliser GetModuleHandle().
Je n'ai jamais utilisé ces techniques sous Python (à priori, mais ça
peut changer, Python est mon langage "un seul code pour toutes les
plateformes"), mais je ne vois pas pourquoi il en irait pour une DLL
différemment des autres ressources, c'est à dire géré au mieux au
travers du GC. Est-ce important de savoir s'il va compter sur le cache
et utiliser LoadLibrary()/FreeLibrary() souvent, ou garder l'objet tant
que la fonction peut être appelée ? Ne pouvez-vous pas faire confiance
à Python ?
Vous pouvez voir ce qui se passe en utilisant un utilitaire quelconque,
par exemple un truc de Sysinternals (racheté par Microsoft, tiens...).
Voyez ListDLLs à cette page:
<URL:http://www.microsoft.com/technet/sysinternals/Processesandthreadsutilities.mspx?wt.svlþatured>
J'utilise ctypes pour activer une dll écrite en C qui effectue des calculs complexes pour évaluer la déclinaison magnétique en fonction de la latitude et de la longitude. J'ai trouvé la fonction qui charge et active la fonction exportée de ma dll et cela fonctionne bien, MAIS je cherche la fonction de libération de la dll ! Le chargement et l'accès à la dll se fait dans une fonction python de cette manière :
QUESTION est-ce que la dll est libérée en quittant la fonction ?
Elle le sera à coup sûr à la fin du processus qui l'a chargée. Même si Python est en intermédiaire, c'est le kernel de Windows qui s'occupe des DLLs. En gros, la DLL est chargée à la première demande est un compteur de processus utilisateurs est incrémenté à chaque nouvelle demande. Ce compteur est décrémenté soit quand un processus le demande spécifiquement, soit quand il se ferme. Le compteur arrivé à 0,la DLL est déchargée. Les fonctions Windows courantes sont LoadLibrary(), GetProcAddress() et FreeLibrary(). Vous pourriez utiliser FreeLibrary() (sans doute avec windll.FreeLibrary(), ou peut-être windll.kernel32.FreeLibrary(). Mais il vous faut envoyer le handle récupéré par LoadLibrary(), et vous allez vous compliquer la vie, soit à tout faire à la main, soit à utiliser GetModuleHandle(). Je n'ai jamais utilisé ces techniques sous Python (à priori, mais ça peut changer, Python est mon langage "un seul code pour toutes les plateformes"), mais je ne vois pas pourquoi il en irait pour une DLL différemment des autres ressources, c'est à dire géré au mieux au travers du GC. Est-ce important de savoir s'il va compter sur le cache et utiliser LoadLibrary()/FreeLibrary() souvent, ou garder l'objet tant que la fonction peut être appelée ? Ne pouvez-vous pas faire confiance à Python ? Vous pouvez voir ce qui se passe en utilisant un utilitaire quelconque, par exemple un truc de Sysinternals (racheté par Microsoft, tiens...). Voyez ListDLLs à cette page: <URL:http://www.microsoft.com/technet/sysinternals/Processesandthreadsutilities.mspx?wt.svlþatured>
-- Pierre Maurette
MCI, Shadok Gouroudoudou
Bonsoir !
Les utilitaires de sysinternals sont excellents !
Mais, dans les outils standards de windows, il y a déjà ce qu'il faut : TASKLIST /M permet de voir les DLL chargées, et par quoi. Cette commande dispose également d'un mini-mode de requêtage, qui permet de mieux cibler les recherches.
Évidemment, les utilitaires de Russinovitch ont une interface graphique nettement plus jolie. Mais TASKLIST peut être piloté par Python, car ses sorties passent par STDOUT.
Une autre possibilité standard de Windows, c'est d'utiliser WMI (pilotable par Python), pour interroger directement les entrailles du système.
Mais, en fait, la question que je me pose, c'est de savoir si c'est vraiment important de savoir si la DLL est encore là, ou non. Quelle est la taille occupée ? Quel impact ? Si c'est pour gagner quelques centaines de ko, autant laisser tomber.
-- @-salutations
Michel Claveau
Bonsoir !
Les utilitaires de sysinternals sont excellents !
Mais, dans les outils standards de windows, il y a déjà ce qu'il faut :
TASKLIST /M permet de voir les DLL chargées, et par quoi.
Cette commande dispose également d'un mini-mode de requêtage, qui
permet de mieux cibler les recherches.
Évidemment, les utilitaires de Russinovitch ont une interface graphique
nettement plus jolie. Mais TASKLIST peut être piloté par Python, car
ses
sorties passent par STDOUT.
Une autre possibilité standard de Windows, c'est d'utiliser WMI
(pilotable par Python), pour interroger directement les entrailles du
système.
Mais, en fait, la question que je me pose, c'est de savoir si c'est
vraiment important de savoir si la DLL est encore là, ou non. Quelle
est la taille occupée ? Quel impact ? Si c'est pour gagner quelques
centaines de ko, autant laisser tomber.
Mais, dans les outils standards de windows, il y a déjà ce qu'il faut : TASKLIST /M permet de voir les DLL chargées, et par quoi. Cette commande dispose également d'un mini-mode de requêtage, qui permet de mieux cibler les recherches.
Évidemment, les utilitaires de Russinovitch ont une interface graphique nettement plus jolie. Mais TASKLIST peut être piloté par Python, car ses sorties passent par STDOUT.
Une autre possibilité standard de Windows, c'est d'utiliser WMI (pilotable par Python), pour interroger directement les entrailles du système.
Mais, en fait, la question que je me pose, c'est de savoir si c'est vraiment important de savoir si la DLL est encore là, ou non. Quelle est la taille occupée ? Quel impact ? Si c'est pour gagner quelques centaines de ko, autant laisser tomber.
-- @-salutations
Michel Claveau
Amaury Forgeot d'Arc
Bonjour à tous,
J'utilise ctypes pour activer une dll écrite en C qui effectue des calculs complexes pour évaluer la déclinaison magnétique en fonction de la latitude et de la longitude. J'ai trouvé la fonction qui charge et active la fonction exportée de ma dll et cela fonctionne bien, MAIS je cherche la fonction de libération de la dll ! Le chargement et l'accès à la dll se fait dans une fonction python de cette manière :
QUESTION est-ce que la dll est libérée en quittant la fonction ?
Elle le sera à coup sûr à la fin du processus qui l'a chargée. Même si Python est en intermédiaire, c'est le kernel de Windows qui s'occupe des DLLs. En gros, la DLL est chargée à la première demande est un compteur de processus utilisateurs est incrémenté à chaque nouvelle demande. Ce compteur est décrémenté soit quand un processus le demande spécifiquement, soit quand il se ferme. Le compteur arrivé à 0,la DLL est déchargée. Les fonctions Windows courantes sont LoadLibrary(), GetProcAddress() et FreeLibrary(). Vous pourriez utiliser FreeLibrary() (sans doute avec windll.FreeLibrary(), ou peut-être windll.kernel32.FreeLibrary(). Mais il vous faut envoyer le handle récupéré par LoadLibrary(), et vous allez vous compliquer la vie, soit à tout faire à la main, soit à utiliser GetModuleHandle().
J'utilise ctypes pour activer une dll écrite en C qui effectue des
calculs complexes pour évaluer la déclinaison magnétique en fonction
de la latitude et de la longitude.
J'ai trouvé la fonction qui charge et active la fonction exportée de
ma dll et cela fonctionne bien, MAIS je cherche la fonction de
libération de la dll !
Le chargement et l'accès à la dll se fait dans une fonction python de
cette manière :
QUESTION est-ce que la dll est libérée en quittant la fonction ?
Elle le sera à coup sûr à la fin du processus qui l'a chargée. Même si
Python est en intermédiaire, c'est le kernel de Windows qui s'occupe des
DLLs.
En gros, la DLL est chargée à la première demande est un compteur de
processus utilisateurs est incrémenté à chaque nouvelle demande. Ce
compteur est décrémenté soit quand un processus le demande
spécifiquement, soit quand il se ferme. Le compteur arrivé à 0,la DLL
est déchargée.
Les fonctions Windows courantes sont LoadLibrary(), GetProcAddress() et
FreeLibrary(). Vous pourriez utiliser FreeLibrary() (sans doute avec
windll.FreeLibrary(), ou peut-être windll.kernel32.FreeLibrary(). Mais
il vous faut envoyer le handle récupéré par LoadLibrary(), et vous allez
vous compliquer la vie, soit à tout faire à la main, soit à utiliser
GetModuleHandle().
J'utilise ctypes pour activer une dll écrite en C qui effectue des calculs complexes pour évaluer la déclinaison magnétique en fonction de la latitude et de la longitude. J'ai trouvé la fonction qui charge et active la fonction exportée de ma dll et cela fonctionne bien, MAIS je cherche la fonction de libération de la dll ! Le chargement et l'accès à la dll se fait dans une fonction python de cette manière :
QUESTION est-ce que la dll est libérée en quittant la fonction ?
Elle le sera à coup sûr à la fin du processus qui l'a chargée. Même si Python est en intermédiaire, c'est le kernel de Windows qui s'occupe des DLLs. En gros, la DLL est chargée à la première demande est un compteur de processus utilisateurs est incrémenté à chaque nouvelle demande. Ce compteur est décrémenté soit quand un processus le demande spécifiquement, soit quand il se ferme. Le compteur arrivé à 0,la DLL est déchargée. Les fonctions Windows courantes sont LoadLibrary(), GetProcAddress() et FreeLibrary(). Vous pourriez utiliser FreeLibrary() (sans doute avec windll.FreeLibrary(), ou peut-être windll.kernel32.FreeLibrary(). Mais il vous faut envoyer le handle récupéré par LoadLibrary(), et vous allez vous compliquer la vie, soit à tout faire à la main, soit à utiliser GetModuleHandle().
J'utilise ctypes pour activer une dll écrite en C qui effectue des calculs complexes pour évaluer la déclinaison magnétique en fonction de la latitude et de la longitude. J'ai trouvé la fonction qui charge et active la fonction exportée de ma dll et cela fonctionne bien, MAIS je cherche la fonction de libération de la dll ! Le chargement et l'accès à la dll se fait dans une fonction python de cette manière :
QUESTION est-ce que la dll est libérée en quittant la fonction ?
Elle le sera à coup sûr à la fin du processus qui l'a chargée. Même si Python est en intermédiaire, c'est le kernel de Windows qui s'occupe des DLLs. En gros, la DLL est chargée à la première demande est un compteur de processus utilisateurs est incrémenté à chaque nouvelle demande. Ce compteur est décrémenté soit quand un processus le demande spécifiquement, soit quand il se ferme. Le compteur arrivé à 0,la DLL est déchargée. Les fonctions Windows courantes sont LoadLibrary(), GetProcAddress() et FreeLibrary(). Vous pourriez utiliser FreeLibrary() (sans doute avec windll.FreeLibrary(), ou peut-être windll.kernel32.FreeLibrary(). Mais il vous faut envoyer le handle récupéré par LoadLibrary(), et vous allez vous compliquer la vie, soit à tout faire à la main, soit à utiliser GetModuleHandle().
Je crois que l'on a là une bonne réponse. De fait j'utilise deux dll, l'une de faible taille peut rester en mémoire mais l'autre importante mérire d'être déchargée pour faire "propre" d'autant qu'elle n'est utilisée qu'une fois.
Merci à tous !!!
JP
Bonjour à tous,
J'utilise ctypes pour activer une dll écrite en C qui effectue des
calculs complexes pour évaluer la déclinaison magnétique en fonction
de la latitude et de la longitude.
J'ai trouvé la fonction qui charge et active la fonction exportée de
ma dll et cela fonctionne bien, MAIS je cherche la fonction de
libération de la dll !
Le chargement et l'accès à la dll se fait dans une fonction python de
cette manière :
QUESTION est-ce que la dll est libérée en quittant la fonction ?
Elle le sera à coup sûr à la fin du processus qui l'a chargée. Même si
Python est en intermédiaire, c'est le kernel de Windows qui s'occupe
des DLLs.
En gros, la DLL est chargée à la première demande est un compteur de
processus utilisateurs est incrémenté à chaque nouvelle demande. Ce
compteur est décrémenté soit quand un processus le demande
spécifiquement, soit quand il se ferme. Le compteur arrivé à 0,la DLL
est déchargée.
Les fonctions Windows courantes sont LoadLibrary(), GetProcAddress()
et FreeLibrary(). Vous pourriez utiliser FreeLibrary() (sans doute
avec windll.FreeLibrary(), ou peut-être windll.kernel32.FreeLibrary().
Mais il vous faut envoyer le handle récupéré par LoadLibrary(), et
vous allez vous compliquer la vie, soit à tout faire à la main, soit à
utiliser GetModuleHandle().
Je crois que l'on a là une bonne réponse.
De fait j'utilise deux dll, l'une de faible taille peut rester en
mémoire mais l'autre importante mérire d'être déchargée pour faire
"propre" d'autant qu'elle n'est utilisée qu'une fois.
J'utilise ctypes pour activer une dll écrite en C qui effectue des calculs complexes pour évaluer la déclinaison magnétique en fonction de la latitude et de la longitude. J'ai trouvé la fonction qui charge et active la fonction exportée de ma dll et cela fonctionne bien, MAIS je cherche la fonction de libération de la dll ! Le chargement et l'accès à la dll se fait dans une fonction python de cette manière :
QUESTION est-ce que la dll est libérée en quittant la fonction ?
Elle le sera à coup sûr à la fin du processus qui l'a chargée. Même si Python est en intermédiaire, c'est le kernel de Windows qui s'occupe des DLLs. En gros, la DLL est chargée à la première demande est un compteur de processus utilisateurs est incrémenté à chaque nouvelle demande. Ce compteur est décrémenté soit quand un processus le demande spécifiquement, soit quand il se ferme. Le compteur arrivé à 0,la DLL est déchargée. Les fonctions Windows courantes sont LoadLibrary(), GetProcAddress() et FreeLibrary(). Vous pourriez utiliser FreeLibrary() (sans doute avec windll.FreeLibrary(), ou peut-être windll.kernel32.FreeLibrary(). Mais il vous faut envoyer le handle récupéré par LoadLibrary(), et vous allez vous compliquer la vie, soit à tout faire à la main, soit à utiliser GetModuleHandle().
Je crois que l'on a là une bonne réponse. De fait j'utilise deux dll, l'une de faible taille peut rester en mémoire mais l'autre importante mérire d'être déchargée pour faire "propre" d'autant qu'elle n'est utilisée qu'une fois.