[C++/DLL] Question existentiellement conceptuelle : DLL "persistante"

Question existentiellement conceptuelle : DLL "persistante" [C++/DLL] - C++ - Programmation

Marsh Posté le 08-12-2003 à 20:03:27    

Hello !
 
Comme je m'y connais moyen en DLL, je demande votre avis car j'ai pas trouvé grand chose la dessus :(
 
J'ai une DLL qui charge un fichier .sys pour choper des infos sur le CPU etc.
 
Seulement j'ai besoin d'y faire appel plusieurs fois de suite.
 
Le truc c'est que le chargement/déchargement prends du temps ( a peu pres 1 seconde et quelques) ce qui me gène dans mon appli, car j'y fait appel a différents endroits assez souvent.
 
Donc, Comment feriez vous une DLL qui  charge une fois le driver ( via appel de procedure certainement), et dont le processus reste en mémoire, attendant des "requetes" pour executer les infos, sous VC++ ?
 
Je pensais aux signaux, mais j'ai tripatouillé ca que dans des executables sous linux, alors je me demandais ce que ca donnait sous winwin :D
 
Merci de votre aide/suggestions !

Reply

Marsh Posté le 08-12-2003 à 20:03:27   

Reply

Marsh Posté le 08-12-2003 à 20:53:11    

Code :
  1. /*
  2. The UnloadDll routine can return 0 to keep the DLL loaded,  
  3. or 1 to allow it to be unloaded.
  4. */
  5. int __stdcall UnloadDll (int mTimeout)
  6. {
  7. return 0;
  8. }


 
j'utilise ca moi (copier coller d'un code, alors faudra ptet adapter) pour faire mes dll

Reply

Marsh Posté le 08-12-2003 à 21:02:10    

merci, mais non spaca :D
 
Mon but est pas de laisser ma DLL chargée dans la mémoire ( enfin si mais indirectement), mais plutot de laisser un processus lancé par la DLL tourner et de lui envoyer des "ordres".
 
C'est possible mais je m'interroge grandement sur les signaux en fait :/

Reply

Marsh Posté le 08-12-2003 à 22:40:22    

T'as pas de signaux sous win comme sous linux mais tu devrais trouver ton bonheur avec les ipc pour que tes processus communiquent (les pipes par exemples).
http://msdn.microsoft.com/library/ [...] ndleex.asp

Reply

Marsh Posté le 08-12-2003 à 22:46:37    

J'avais raison de douter des signaux :D
 
La ou je capte pas, c'est que je peux pas faire un pipe. le pipe se créé à partir d'une variable globale. Or, si j'apelle une autre fonction de la DLL, je vais avoir un nouveau contexte ( non ? je me trompe peut etre ), donc la variable du pipe, le FD en fait, sera accessible depuis le créateur et pas depuis la fonction appelée.
 
Par exemple si je fais une DLL style :

Code :
  1. int a=0;
  2. void set()
  3. {
  4. a = 1;
  5. }
  6. int get()
  7. {
  8. return a;
  9. }

 
 
En version simplifiée et rapide, et que j'apelle ca avec :

Code :
  1. set();
  2. printf("%d\n",get());


 
je vais afficher 0, et pas 1, non ?
 
J'ai raison, tort ?
 
Quelqu'un peut m'expliquer svp :D


Message édité par Tetedeiench le 08-12-2003 à 22:46:54
Reply

Marsh Posté le 08-12-2003 à 23:14:15    

Tu peux placer ta variable a dans une section shared.
Y'a un truc que je pige pas : si tu fais plusieurs appels de suite, pourquoi le driver et chargé / déchargé à chacun de ces appels ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-12-2003 à 23:17:19    

HelloWorld a écrit :

Tu peux placer ta variable a dans une section shared.
Y'a un truc que je pige pas : si tu fais plusieurs appels de suite, pourquoi le driver et chargé / déchargé à chacun de ces appels ?


 
Ben je me demande si c'est un bug mais ca marchait pas :D
 
La je vais rentrer et essayer de debugguer ca, ou demain aprem.

Reply

Marsh Posté le 08-12-2003 à 23:21:40    

Si j'ai bien compris, dans ton aplis, qui ne s'exécute qu'une fois, a chaque appel du driver hop il est chargé, il fait le boulot, puis il est déchargé. Si c'est ça, tu dois avoir des closehandle de trop...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 09-12-2003 à 00:18:37    

HelloWorld a écrit :

Si j'ai bien compris, dans ton aplis, qui ne s'exécute qu'une fois, a chaque appel du driver hop il est chargé, il fait le boulot, puis il est déchargé. Si c'est ça, tu dois avoir des closehandle de trop...


 
oui, mais sans faire ca, ca buggue :D
 
Je débugguerai ca demain, la je regarde déjà si ca marche sous 98 en rechargeant le driver a chaque fois.

Reply

Marsh Posté le 10-12-2003 à 00:51:25    

Ah, ben c'est pas normal... Le mieux est de chercher l'erreur au lieu de chercher à la contourner.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 10-12-2003 à 00:51:25   

Reply

Marsh Posté le 10-12-2003 à 14:10:42    

Tu peux utiliser le FileMapping, ca te créé un fichier virtuel temporaire dans le but de partager un espace mémoire, tu peux bricoler dedans comme bon te semble.

Reply

Marsh Posté le 10-12-2003 à 15:11:59    

bah ta DLL tu la garde chargée, et tu te démerdes avec un système de compteur d'utilisation ou un truc du genre ?

Reply

Marsh Posté le 12-12-2003 à 02:38:10    

C'est déjà implémenté en interne par Windows. AMA il fait un LoadLibrary/FreeLibrary entre chaque appel. Il lui suffit de le faire une fois en tout (load au demarrage process, free à la fin).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 12-12-2003 à 02:45:44    

HelloWorld a écrit :

C'est déjà implémenté en interne par Windows. AMA il fait un LoadLibrary/FreeLibrary entre chaque appel. Il lui suffit de le faire une fois en tout (load au demarrage process, free à la fin).


 
bin c'est ça que je comprends po, comment il se démerde pour avoir le load et le free a -presque- chaque appel ?

Reply

Marsh Posté le 14-12-2003 à 19:27:23    

copier-coller de code sans trop comprendre ... ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-12-2003 à 07:05:27    

HelloWorld a écrit :

copier-coller de code sans trop comprendre ... ?


 
Bug sans trop comprendre d'ou il vient oui :heink:
 
C'est fou ce que vous pouvez être méprisant pour pas grand chose quand même, c'est assez dingue, limite ca dégoute.
 
Je vois pas ce qui te permet de dire ca, et de 1, et de 2, je serai bien curieux de savoir ce que tu serai capable de faire, toi, à ma place, gamin.
 
Franchement, Helloworld, j'applaudis. Si ton égo et ton sarcasme est à la hauteur de ton intelligence, cette dernière est du niveau de celle d'un enfant hydrocéphale dont la tete est sur un radiateur électrique, qui ouvre la bouche et qui fait "Fuiiiiiiiiiiiiiiiiiiiiiiii" :heink:


Message édité par Tetedeiench le 15-12-2003 à 07:06:00
Reply

Marsh Posté le 15-12-2003 à 08:51:07    

tetedeiench a écrit :


 
Bug sans trop comprendre d'ou il vient oui :heink:
 
C'est fou ce que vous pouvez être méprisant pour pas grand chose quand même, c'est assez dingue, limite ca dégoute.
 
Je vois pas ce qui te permet de dire ca, et de 1, et de 2, je serai bien curieux de savoir ce que tu serai capable de faire, toi, à ma place, gamin.
 
Franchement, Helloworld, j'applaudis. Si ton égo et ton sarcasme est à la hauteur de ton intelligence, cette dernière est du niveau de celle d'un enfant hydrocéphale dont la tete est sur un radiateur électrique, qui ouvre la bouche et qui fait "Fuiiiiiiiiiiiiiiiiiiiiiiii" :heink:


 
c'est bon on va pas se battre pour ca hein... [:greenleaf]

Reply

Marsh Posté le 15-12-2003 à 13:05:53    

tetedeiench a écrit :


 
Bug sans trop comprendre d'ou il vient oui :heink:
 
C'est fou ce que vous pouvez être méprisant pour pas grand chose quand même, c'est assez dingue, limite ca dégoute.
 
Je vois pas ce qui te permet de dire ca, et de 1, et de 2, je serai bien curieux de savoir ce que tu serai capable de faire, toi, à ma place, gamin.
 
Franchement, Helloworld, j'applaudis. Si ton égo et ton sarcasme est à la hauteur de ton intelligence, cette dernière est du niveau de celle d'un enfant hydrocéphale dont la tete est sur un radiateur électrique, qui ouvre la bouche et qui fait "Fuiiiiiiiiiiiiiiiiiiiiiiii" :heink:


 
c'est quoi c'est une DLL que tu utilises dans WinDev ? (je crois me souvenir que tu fais souvent tes trucs sous WinDev ?)

Reply

Marsh Posté le 15-12-2003 à 16:36:15    

Citation :

Bug sans trop comprendre d'ou il vient oui    
 
C'est fou ce que vous pouvez être méprisant pour pas grand chose quand même, c'est assez dingue, limite ca dégoute.
 
Je vois pas ce qui te permet de dire ca, et de 1, et de 2, je serai bien curieux de savoir ce que tu serai capable de faire, toi, à ma place, gamin.
 
Franchement, Helloworld, j'applaudis. Si ton égo et ton sarcasme est à la hauteur de ton intelligence, cette dernière est du niveau de celle d'un enfant hydrocéphale dont la tete est sur un radiateur électrique, qui ouvre la bouche et qui fait "Fuiiiiiiiiiiiiiiiiiiiiiiii"  


 
Oh la oh la, on se calme.
Tout d'abord, si je me fie à ta date de naissance, le gamin il est plus vieux que toi. Ensuite ta petite phrase d'insulte à 2 balles t'aurais pu te la garder, ça aurait pas été plus mal.
Y'avait aucun mépris dans ma réponse. Y'a pas de honte à pas tout comprendre, je suis le premier à essayer tout un tas de choses quand j'ai un problème et des fois ne pas bien saisir ce que je fais. On se pose des questions sur ton probleme, et on demande comment tu peux te retrouver avec une suite de Load-Free dans ton code au lieu d'un Load au debut et un Free à la fin. C'est le cas typique du code de vbfrance copié-collé dans son programme. D'autant plus que tu load un driver, ça sent vraiment la récup.  
Moi je pense que l'erreur vient d'une mauvaise utilisation. Ca te vexe énormément que je pense cela. Ok, je vais me noter sur un post-it que t'es infaillible et de ne pas suggérer un problème dans ton code.
Tu me traite de méprisant, de sarcastique, etc... Libre à toi d'interpréter ma question comme une remarque de mépris. Moi j'ai ma conscience tranquille, je crois pas me trainer une réputation de mec qui vient ici pour casser du newbie.
Et s'il t'en faut si peu pour te dégouter, ben t'as pas fini de vomir.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-12-2003 à 19:02:35    

HelloWorld a écrit :

Citation :

Bug sans trop comprendre d'ou il vient oui    
 
C'est fou ce que vous pouvez être méprisant pour pas grand chose quand même, c'est assez dingue, limite ca dégoute.
 
Je vois pas ce qui te permet de dire ca, et de 1, et de 2, je serai bien curieux de savoir ce que tu serai capable de faire, toi, à ma place, gamin.
 
Franchement, Helloworld, j'applaudis. Si ton égo et ton sarcasme est à la hauteur de ton intelligence, cette dernière est du niveau de celle d'un enfant hydrocéphale dont la tete est sur un radiateur électrique, qui ouvre la bouche et qui fait "Fuiiiiiiiiiiiiiiiiiiiiiiii"  


 
Oh la oh la, on se calme.
Tout d'abord, si je me fie à ta date de naissance, le gamin il est plus vieux que toi. Ensuite ta petite phrase d'insulte à 2 balles t'aurais pu te la garder, ça aurait pas été plus mal.
Y'avait aucun mépris dans ma réponse. Y'a pas de honte à pas tout comprendre, je suis le premier à essayer tout un tas de choses quand j'ai un problème et des fois ne pas bien saisir ce que je fais. On se pose des questions sur ton probleme, et on demande comment tu peux te retrouver avec une suite de Load-Free dans ton code au lieu d'un Load au debut et un Free à la fin. C'est le cas typique du code de vbfrance copié-collé dans son programme. D'autant plus que tu load un driver, ça sent vraiment la récup.  
Moi je pense que l'erreur vient d'une mauvaise utilisation. Ca te vexe énormément que je pense cela. Ok, je vais me noter sur un post-it que t'es infaillible et de ne pas suggérer un problème dans ton code.
Tu me traite de méprisant, de sarcastique, etc... Libre à toi d'interpréter ma question comme une remarque de mépris. Moi j'ai ma conscience tranquille, je crois pas me trainer une réputation de mec qui vient ici pour casser du newbie.
Et s'il t'en faut si peu pour te dégouter, ben t'as pas fini de vomir.


 
J'ai dis 5 fois auparavant que le load/free a chaque fois est la car une fonction load et une fonction free avec les appels entre chaque me pourrit le truc :heink:
 
C'est pour ma DLL de récupération d'infos. Autant y a des infos dont je n'ai besoin qu'une fois ( et que je peux donc récupérer facilement en masse de facon unique) autant d'autres doivent etre récupérées plusieurs fois et de facon unaire. Donc vu que la soluce "load dans une fonction, free dans une autre, et les appels dans des fonctions différentes" ne marche pas, faut bien que je fasse le load/free a chaque fois.
 
M'enfin, tu as raison, devine d'ou provient mon code, tout ca sur la base d'un post sur la section sans code :D Tu es très fort.
 
Quant à l'insulte elle n'est pas insulte mais bien au niveau de ton psot. Quant à l'age, c'était plus de la dérision qu'autre chose pour te refouttre en place.
 
C'est marrant, a vous écouter, j'ai toutes les réputations du monde. En voici une nouvelle. Allez, à la prochaine, je sodomise les poules ?
 
Topic clos pour ma part, les réponses de certains me donne envie de vomir.


Message édité par Tetedeiench le 15-12-2003 à 19:03:06
Reply

Marsh Posté le 15-12-2003 à 19:05:46    

tetedeiench a écrit :


C'est marrant, a vous écouter, j'ai toutes les réputations du monde. En voici une nouvelle. Allez, à la prochaine, je sodomise les poules ?


 
fo dire, c quelque chose, a chaque fois que tu posts ca finis en fight, y'a bien un truc non ?

Reply

Marsh Posté le 15-12-2003 à 19:27:45    

T'as peut etre dis 5 fois un truc, mais moi j'ai pas bien pigé ton pblm. Je sais pas si c'est le driver ou la dll qui est loadé trop de fois, et surtout, et je suis pas le seul, je sais tjrs pas pkoi "une fonction load et une fonction free avec les appels entre chaque me pourrit le truc".
Pas de précisions, pas de code, je suis pas Houdini.

Citation :

C'est marrant, a vous écouter, j'ai toutes les réputations du monde.


Là encore c'est toi qui va chercher ça...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 16-12-2003 à 08:49:52    

HelloWorld a écrit :

T'as peut etre dis 5 fois un truc, mais moi j'ai pas bien pigé ton pblm. Je sais pas si c'est le driver ou la dll qui est loadé trop de fois, et surtout, et je suis pas le seul, je sais tjrs pas pkoi "une fonction load et une fonction free avec les appels entre chaque me pourrit le truc".
Pas de précisions, pas de code, je suis pas Houdini.

Citation :

C'est marrant, a vous écouter, j'ai toutes les réputations du monde.


Là encore c'est toi qui va chercher ça...


 
http://perso.wanadoo.fr/magica/images/colmir1.jpg
 
Non, mais moi je suis Sylvain Mirouf  [:greenleaf]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed