comment décharger la dll - page 5

 
TheXpert >> :

1ère question - comment le système sait-il à partir de quels processus décharger la dll ?

Question 2 - comment trouver le point d'entrée sans charger la dll ?


Maintenant, essentiellement. La dll est chargée et déchargée pendant regsvr pour un enregistrement correct. Et bien sûr, cela n'a aucun effet sur le déchargement d'autres processus.

N'essayez pas de paraître plus stupide que vous ne l'êtes. Mais il y a une bonne chose, tu peux lire le mana.

Évidemment. En plus du déchargement de la dll dans la mise en œuvre de la désinitialisation de l'indicateur (Expert Advisor), vous pouvez faire tout ce qui y est directement lié, ce qui transforme la libération non autorisée de la dll en un hack, qui à son tour ne garantit pas le bon fonctionnement du terminal.


En somme - vous ne pourrez pas prouver que vous n'êtes pas un imbécile, bonne chance, continuez à pousser.

2All : ne pensez pas à l'engager comme administrateur.

А ? Quoi ?

Quelqu'un qui comprend, s'il vous plaît, traduisez ceci en langage humain.

(non, je me suis trompé plus tôt, TheExpert ne peut pas être un employé d'une société telle que MetaQuotes, juste une de mes réponses a été supprimée très rapidement).

 
AlexEro >> :
Oncle hacker, il n'y a aucune logique dans vos propos : si la bibliothèque est TOUJOURS déchargée, pourquoi "mon" appel à FreeLibrary selon vous "ne fonctionnera pas dans de nombreux cas" ? Quel mal pourrait-on faire d'un appel supplémentaire à FreeLibrary dans le bloc deinit() ? Selon vous, le fait d'appeler FreeLibrary() bloquerait-il en quelque sorte la libération de la bibliothèque ? Ce n'est pas juste, oncle kool hacker, et c'est évident.

Ce n'est pas difficile à comprendre. Si la dll elle-même ne se décharge pas correctement, alors vous avez une mauvaise main et vous avez fait une erreur dans le code de la dll (et très probablement dans la DllMain, ou les exapses masqués). C'est la seule raison, il n'y en a pas d'autres, car Windows et Terminal sont tous deux extrêmement fidèles à la dll. Parlons maintenant de FreeLibrary, que les développeurs de MT4 ont caché des mains malveillantes d'administrateurs présomptueux. Si le code de la dll est correct - l'appel de cette fonction est inutile, et cela peut d'ailleurs être compris à partir de la documentation du terminal, car tout est déchargé par lui-même. Mais si le code est incorrect, comme dans votre cas, FreeLibrary peut provoquer un blocage et/ou un plantage du terminal. Notez que FreeLibrary ne garantit pas le déchargement dans les situations d'erreur. Parfois, FreeLibrary peut aider et parfois le contraire peut aggraver les choses. Il s'agit d'une loterie, il n'est donc pas recommandé d'utiliser cette fonction dans ce cas. Il est recommandé d'écrire un bon code. Bien sûr, si vous ne pouvez pas faire ça, votre Dll ne peut pas vous aider. C'est vrai.


En fait, cela a déjà été dit ici de nombreuses fois, il faut vraiment arrêter de jouer le rôle d'un autre idiot du forum.

 
HideYourRichess >> :

Ce n'est pas difficile à comprendre. Si la dll elle-même n'est pas déchargée correctement, cela signifie que vous avez de mauvaises mains et que vous avez fait une erreur dans le code de la dll, (et très probablement dans la DllMain, ou les exapses masqués). C'est la seule raison, il n'y en a pas d'autres, car tant Windows que Terminal sont extrêmement fidèles à la dll. Parlons maintenant de FreeLibrary, que les développeurs de MT4 ont caché des mains malveillantes d'administrateurs présomptueux. Si le code de la dll est correct - l'appel de cette fonction est inutile, et cela peut d'ailleurs être compris à partir de la documentation du terminal, car tout est déchargé par lui-même. Mais si le code est incorrect, comme dans votre cas, FreeLibrary peut provoquer un blocage et/ou un plantage du terminal. Notez que FreeLibrary ne garantit pas le déchargement dans les situations d'erreur. Parfois, FreeLibrary peut aider et parfois le contraire peut aggraver les choses. Il s'agit d'une loterie, il n'est donc pas recommandé d'utiliser cette fonction dans ce cas. Il est recommandé d'écrire un bon code. Bien sûr, si vous ne pouvez pas faire ça, votre Dll ne peut pas vous aider. C'est vrai.


En fait, cela a déjà été dit ici de nombreuses fois, vous feriez peut-être mieux d'arrêter de jouer le rôle de l'idiot du forum.

Tonton pirate, d'habitude, dans un moment pareil, il est de coutume (même dans les grandes entreprises à distance) de demander "qu'est-ce que tu fumes là ?", mais je vais demander plus poliment :

Oncle Hacker, avez-vous lu "Comment j'ai édité un journal agricole" de Mark Twain ? Tu l'as fait ? Le rédacteur en chef du journal y écrit qu'il a cueilli des rutabagas sur des arbres sans savoir ce qu'est un rutabaga.

 

Allez, c'est aussi un tour de passe-passe pour essayer d'"obtenir" des "autorités" comme Mark Twain de votre côté.


Admettez que vous ne comprenez pas ce qu'est un DLL et comment il fonctionne.


Qu'y a-t-il à ne pas comprendre ? Êtes-vous un mauvais administrateur et un mauvais rédacteur de dll ?

 
HideYourRichess >> :

Allez, c'est le même tour de passe-passe, essayer d'avoir des "autorités" comme Mark Twain de votre côté.


Admettez que vous ne comprenez pas ce qu'est un DLL et comment il fonctionne.


Oh, c'est comme ça que ça marche ? Oui, mais l'oncle hacker, même Microsoft lui-même ne le sait pas et/ou ne sait pas comment le réparer ! C'est ce qu'on appelle "DLL HELL" chez les pros. Tu n'as pas entendu ? Voici le lien de wikipedia :

https://en.wikipedia.org/wiki/Dll_hell

Il y a un tas d'autres liens à la fin, dont certains de Microsoft.

Je suis heureux de savoir, mon oncle, que j'ai virtuellement rencontré CETTE personne sur ce forum, qui SAIT comment tout cela fonctionne et comment le gérer.

 

L'enfer des Dll est un vieux problème bien connu, et les moyens de le résoudre, au niveau de l'utilisateur, sont bien connus.


Mais essayez d'expliquer comment ce problème est lié au terminal ?


Je soupçonne que vous avez parcouru ce wiki et que vous n'avez toujours pas saisi l'essence du problème. Au cas où, permettez-moi de vous rappeler : "L'essence du problème est un conflit de versions de DLL destinées à supporter certaines fonctions. L'enfer des DLL est un exemple de mauvais concept de programmation, qui, comme une mine cachée, conduit à une forte augmentation des difficultés avec la complication et l'amélioration du système" (j'ai repris la description du wiki russe, puisque les Russes suivent notre discussion).


Alors, quel est le rapport entre Dll Hell et le terminal ? et aussi, comment regsvr32 ou FreeLibrary peuvent-ils aider contre ce problème ?

 
HideYourRichess >> :

L'enfer des Dll est un vieux problème bien connu, et les moyens de le résoudre, au niveau de l'utilisateur, sont bien connus.


Mais essayez d'expliquer comment ce problème est lié au terminal ?


J'ai l'impression que vous avez parcouru ce wiki et que vous ne comprenez toujours pas le problème.


Alors, quel est le rapport entre Dll Hell et le terminal ? et aussi, comment regsvr32 ou FreeLibrary peuvent-ils aider contre ce problème ?

Encore une fois, des phrases générales et pas de spécificités, juste des remarques sarcastiques. L'enfer de DLL n'est pas directement lié au problème, il est seulement lié à votre déclaration selon laquelle vous savez tout sur DLL, qu'il n'y a pas de problèmes et que toute personne intelligente peut éviter TOUS les problèmes avec DLL par une étude réfléchie d'un dock sans nom. J'ai répondu au reste des questions sur le problème ci-dessus, avec des citations et des liens. Contrairement à vous.

 
AlexEro >> :

Encore une fois, des phrases générales et aucune spécificité, juste de la rancœur. L'enfer des DLL n'est pas directement lié au problème, il se réfère uniquement à votre déclaration selon laquelle vous savez tout sur les DLL, qu'il n'y a aucun problème et que toute personne qui n'est pas stupide par l'étude réfléchie d'un doku sans nom peut éviter TOUT problème avec les DLL. J'ai répondu au reste des questions sur le problème ci-dessus, avec des citations et des liens. Contrairement à vous.

Êtes-vous offensé ? ! Allez, prenez mon exemple, je ne prête pas attention à vos petites tentatives mesquines d'humilier votre interlocuteur.


Et il n'y a vraiment rien de compliqué à propos de dll, si vous savez sur quel râteau vous ne devez pas marcher, surtout c'est simple dans la mise en œuvre offerte par les méga quotas.


Vous ne voulez pas admettre que la seule façon d'éviter les problèmes de dll est d'écrire cette même dll de manière compétente - c'est stupide. Les références dont vous avez besoin ici sont impossibles à comprendre.

 

D'après mon expérience personnelle, il n'y a aucun problème avec les bibliothèques dynamiques (lorsque l'on écrit en delphi et en c++). Je les ai fait libérer immédiatement après avoir désactivé les indicateurs qui les utilisaient. Une déconnexion rapide de l'indicateur + remplacement de la dll a toujours réussi.

Je n'utiliserais pas FreeLibrary juste parce que mon code n'appelle pas explicitement LoadLibrary - je ne vais pas corriger les erreurs de quelqu'un d'autre (si elles sont reproductibles et non liées à mon code - il est plus facile d'informer les développeurs).

Je doute sérieusement que ce problème soit le résultat d'un code tiers (windows ou mt) ne fonctionnant pas correctement.

 

Salutations à tous !

Le sujet est devenu intéressant et j'ai décidé de vérifier le sujet discuté sur un exemple simple fourni avec le terminal(projet DLLSample).

Après avoir compilé dans VS 6.0, la dll cuite fonctionne avec le terminal avec succès, mais ne se décharge pas !

Voici la fonction principale :

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
  {
//----
   switch( ul_reason_for_call)
     {
      case DLL_PROCESS_ATTACH:
      case DLL_THREAD_ATTACH:
      case DLL_THREAD_DETACH:
      case DLL_PROCESS_DETACH:
         break;
     }
//----
   return(TRUE);
  }

Et maintenant une question aux connaisseurs qui comprennent vraiment comment la dll est et fonctionne sous le vent et savent comment la compiler correctement dans un projet sous VS 6.0(par exemple).

Le prototype de la fonction principale est-il correct ?

Comment gérer les flux ATTACH/DETACH ?

Où trouver des informations à ce sujet, de préférence avec des exemples ?