| |||||
| Bas de page | |
|---|---|
| Auteur | Sujet : [C] Utilisation d'une DLL |
EdwardKei | Bonjour,
Message cité 1 fois Message édité par EdwardKei le 11-11-2008 à 12:06:16 |
Publicité | Posté le 11-11-2008 à 11:42:48 ![]() ![]()
|
sligor Profil: Calme |
Message cité 1 fois Message édité par sligor le 11-11-2008 à 14:26:58 |
olivthill |
Elle est chargée quand le progrmme en a besoin. Ca peut-être longtemps après le chargement du programme. Cela peut-être longtemps avant si un autre programme en a eu besoin.
Une API Windows (pour les autres API c'est peut-être différent) n'est pas un ensemble de fonctions, c'est UNE fonction, écrite en C, incluse dans Windows et documentée par M$. Les API résident physiquement dans des DLL (user32.dll, par exemple).
Cela dépend de la DLL. Si c'est une DLL du noyau, il n'y a pas besoin de demander son chargement, mais si c'est une DLL maison, alors il faut demander son chargement (que Windows ne fera pas s'il voit qu'elle est déjà chargée en mémoire) avec l'API LoadLibrary().
|
EdwardKei | Merci pour toutes vos réponses...
|
olivthill | La différence réside dans le fait que pour un chargement explicite, il faut inclure dans le programme l'appel à LoadLibrary(), GetProcAddress(), et FreeLibrary() alors que ce n'est pas nécessaire si le chargement est implicite.
Message édité par olivthill le 17-11-2008 à 10:53:37 |
EdwardKei | J'avais pu noter cette différence mais, en fait, ma question est plutôt de connaître l'intérêt d'une méthode plutôt que de l'autre. Je veux dire, il est préférable de gérer le chargement de sa DLL plutôt que de laisser ça à Windows ? Si oui, pourquoi ?
--------------- "L'intelligence, c'est le seul outil qui permet à l'homme de mesurer l'étendue de son malheur." - Pierre Desproges |
olivthill | Avec LoadLibrary(), on est certain que la DLL sera chargée. Cela évite d'avoir à se poser des questions en fonction de la version de Windows ou d'autres paramètres. Et si on fait LoadLibrary() alors que ce n'est pas utile, alors tout marche quand même. Mais, pour les DLL hyper communes, du genre user32.dll, c'est inutile de le faire.
|
tpierron | En général vaut mieux laisser Windows faire ça, car le code est nettement plus simple.
|
EdwardKei | Oui mais dans le cas où Windows gère tout seul le chargement en mémoire, il peut y avoir un problème lors de l'utilisation de la DLL sur un OS proche mais suffisamment différent pour poser potentiellement problème (au hasard Windows Vista Message cité 1 fois Message édité par EdwardKei le 18-11-2008 à 13:04:11 --------------- "L'intelligence, c'est le seul outil qui permet à l'homme de mesurer l'étendue de son malheur." - Pierre Desproges |
kao98 ... | Ta DLL, tu dois l'écrire avec labWindows non ?
Message édité par kao98 le 18-11-2008 à 14:07:57 --------------- Kao ..98 | BsA (airsoft) |
EdwardKei | Pas nécessairement avec LabWindows. Moi j'utilise Code::Blocks comme IDE actuellement.
--------------- "L'intelligence, c'est le seul outil qui permet à l'homme de mesurer l'étendue de son malheur." - Pierre Desproges |
gilou ModérateurIt's the only NEET thing to do |
Utiliser une DLL compilée avec un compilo A dans un programme compilé avec un compilo B, ca a toujours été périlleux: Un exemple de problème rencontré: le compilo A installe son handler d'erreur en cas de division par zero. Le compilo B aussi. Message édité par gilou le 19-11-2008 à 13:45:36 --------------- I think you guys should really consider virtualizing the whole process and moving it to the cloud. |
EdwardKei | Mais le fait de d'utiliser une DLL qui a été compilé avec un compilateur X dans un programme que l'on compile avec un compilo Y c'est pas justement le cas habituel ? En règle général, on ne sait pas avec quel compilo notre DLL a été compilée, je me trompe ? --------------- "L'intelligence, c'est le seul outil qui permet à l'homme de mesurer l'étendue de son malheur." - Pierre Desproges |
gilou ModérateurIt's the only NEET thing to do | C'est pour cela que en environnement professionnel, les vendeurs de dll payantes te proposent parfois la dll compilée avec plusieurs versions du compilo A+, Message édité par gilou le 19-11-2008 à 15:18:30 --------------- I think you guys should really consider virtualizing the whole process and moving it to the cloud. |
EdwardKei | Sauf que là, il s'agit justement d'une DLL pro, donnée à contrecœur par le constructeur pour éviter que l'on puisse se passer de son propre logiciel d'acquisition, donc les infos ne sont pas toutes au RdV... --------------- "L'intelligence, c'est le seul outil qui permet à l'homme de mesurer l'étendue de son malheur." - Pierre Desproges |
EdwardKei | Bon, j'ai réussi à compiler la DLL constructeur...
Message cité 1 fois Message édité par EdwardKei le 27-11-2008 à 15:37:06 |
Joel F Real men use shared_ptr |
--------------- MetaScale | Mes cartes Magic |
EdwardKei |
|
olivthill | L'intérêt de la chose est que si ce n'est pas un multiple de 4, alors les données ne sont pas "alignées" et cela ne marche pas. |
tpierron |
|
EdwardKei | Merci de vos réponses.
Message édité par EdwardKei le 28-11-2008 à 11:32:01 |
olivthill | Pourquoi aligner les début de ligne sur 4 octets ? Parce que c'est plus rapide sur les architectures 32-bit (CPU et/ou chip de la carte graphique), car sinon le microprocesseur est obligé de faire un masquage pour ne récupérer qu'à partir du deuxième, troisième ou quatrième octet dans son registre de 32 bits. |
EdwardKei | A propos de l'alignement des débuts de lignes, j'ai du mal à voir l'intéret de l'astuce.
--------------- "L'intelligence, c'est le seul outil qui permet à l'homme de mesurer l'étendue de son malheur." - Pierre Desproges |
olivthill | Ce n'est pas une question d'intérêt, mais de nécessité. Essayez votre progrmame avec une longueur de 663 et s'il ne marche pas (comme je le suppose), essayez avec l'alignement sur 664 (et il devrait marcher). |
EdwardKei |
Message édité par EdwardKei le 28-11-2008 à 16:47:29 --------------- "L'intelligence, c'est le seul outil qui permet à l'homme de mesurer l'étendue de son malheur." - Pierre Desproges |
tpierron | Plus que de nécessité, je dirais d'optimisation. Enfin, ça reste encore à prouver que c'est toujours utile à l'heure actuelle. Pour autant que je me souvienne cette contrainte date de la préhistoire : Windows 3.1 au plus. Par compatibilité ascendante, Microsoft n'avait pas trop d'autre choix que de garder cette contrainte. Cela dit, c'est pas la mort non plus. Perso j'aligne ça avec un code du genre :
|
Publicité | Posté le ![]() ![]()
|
| Sujets relatifs | |
|---|---|
| Utilisation de la fonction "include()" | [C++][resolu]error: no matching function for call to... |
| [ C ] Erreur de segmentation (core dumped) | Programmation Threads en C++ |
| utilisation de setrlimit | utiliser une dll compilée en C# dans un projet VisualC++ |
| Utilisation de goto et les prob engendrés ? | Exercices programmation C++ |
| VBA - C++ - DLL | |
| Plus de sujets relatifs à : [C] Utilisation d'une DLL | |





