come scaricare la dll - pagina 5

 
TheXpert >> :

1a domanda - come fa il sistema a sapere da quali processi scaricare la dll?

Domanda 2 - come faccio a trovare il punto di ingresso senza caricare la dll?


Ora, essenzialmente. La dll viene caricata e scaricata durante regsvr per una corretta registrazione. E naturalmente questo non ha alcun effetto sullo scarico da altri processi.

Non cercate di sembrare più stupidi di quello che siete. Ma c'è una cosa buona: si può leggere il mana.

Ovviamente. Oltre allo scarico della dll nell'implementazione della deinizializzazione dell'indicatore (Expert Advisor), è possibile fare qualsiasi cosa direttamente collegata ad essa, il che trasforma il rilascio non autorizzato della dll in un hack, che a sua volta non garantisce il corretto funzionamento del terminale.


Tutto sommato - non sarai in grado di dimostrare che non sei un pazzo, buona fortuna, continua a spingere.

2All: non pensare di assumerlo come amministratore.

А? Cosa?

Qualcuno che capisce, per favore, traduca questo in linguaggio umano.

(no, mi sono sbagliato prima, TheExpert non può essere un dipendente di una società come MetaQuotes, solo una delle mie risposte è stata cancellata molto rapidamente).

 
AlexEro >> :
Zio hacker, non c'è logica nelle tue parole: se la libreria è SEMPRE scaricata, perché la "mia" chiamata FreeLibrary secondo te "non funzionerà in molti casi"? Che danno potrebbe venire da una chiamata extra a FreeLibrary nel blocco deinit()? Chiamare FreeLibrary() secondo voi bloccherebbe in qualche modo il rilascio della libreria o qualcosa del genere? Non è giusto, zio kool hacker, ed è ovvio.

Non è difficile da capire. Se la dll stessa non si scarica correttamente - allora hai una brutta mano e hai fatto un errore nel codice della dll, (e molto probabilmente nel DllMain, o nelle exapse mascherate). Questa è l'unica ragione, non ce ne sono altre, poiché sia Windows che Terminal sono estremamente fedeli alla dll. Ora circa FreeLibrary, che gli sviluppatori di MT4 hanno nascosto dalle mani cattive degli amministratori presuntuosi. Se il codice della dll è corretto - la chiamata di questa funzione non è necessaria, e questo incidentalmente può essere capito dalla documentazione per il terminale, perché tutto viene scaricato da solo. Ma se il codice è sbagliato, come nel tuo caso, FreeLibrary può causare deadlock e/o crash del terminale. Si noti che FreeLibrary non garantisce lo scarico in situazioni di errore. A volte FreeLibrary può aiutare e a volte il contrario può peggiorare le cose. Si tratta di una lotteria, quindi non si raccomanda di usare questa funzione in questo caso. Si raccomanda di scrivere un buon codice. Naturalmente se non puoi farlo, il tuo dll non può aiutarti. Questo è vero.


In realtà, è già stato detto qui molte volte, forse davvero smettere di giocare la parte di un altro idiota del forum.

 
HideYourRichess >> :

Non è difficile da capire. Se la dll stessa non viene scaricata correttamente, significa che avete mani cattive e avete fatto un errore nel codice della dll, (e molto probabilmente nel DllMain, o nelle exapses mascherate). Questa è l'unica ragione, non ce ne sono altre, poiché sia Windows che Terminal sono estremamente fedeli al dll. Ora circa FreeLibrary, che gli sviluppatori di MT4 hanno nascosto dalle mani cattive degli amministratori presuntuosi. Se il codice della dll è corretto - la chiamata di questa funzione non è necessaria, e questo incidentalmente può essere capito dalla documentazione del terminale, perché tutto viene scaricato da solo. Ma se il codice è sbagliato, come nel tuo caso, FreeLibrary può causare deadlock e/o crash del terminale. Si noti che FreeLibrary non garantisce lo scarico in situazioni di errore. A volte FreeLibrary può aiutare e a volte il contrario può peggiorare le cose. Si tratta di una lotteria, quindi non si raccomanda di usare questa funzione in questo caso. Si raccomanda di scrivere un buon codice. Naturalmente se non puoi farlo, il tuo dll non può aiutarti. Questo è vero.


In realtà è stato detto qui già molte volte, forse è meglio che tu smetta di giocare il ruolo di sciocco del forum.

Zio hacker, di solito in un momento come questo è consuetudine (anche nelle grandi aziende a lunga distanza) chiedere "cosa stai fumando lì?", ma io lo chiederò più educatamente:

Zio hacker, hai letto "Come ho diretto un giornale agricolo" di Mark Twain? L'hai fatto? Lì, l'editore del giornale scrive di raccogliere rutabaga dagli alberi senza sapere cosa sia una rutabaga.

 

Dai, è anche un trucco da quattro soldi per cercare di "portare" le "autorità" come Mark Twain dalla tua parte.


Ammettete che non capite cos'è un dll e come funziona.


Cosa c'è da non capire, sei un cattivo amministratore e un cattivo scrittore di dll?

 
HideYourRichess >> :

Andiamo, è il solito trucco da quattro soldi, cercare di "portare" le "autorità" come Mark Twain dalla tua parte.


Ammettete che non capite cos'è un dll e come funziona.


Oh, è così che funziona? Sì, ma zio hacker, anche la stessa Microsoft non lo sa e/o non sa come aggiustarlo! Si chiama "DLL HELL" tra i professionisti. Non hai sentito? Ecco il link da wikipedia:

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

C'è un mucchio di altri link alla fine, compresi alcuni da Microsoft.

Sono felice di sapere, zio, che ho virtualmente incontrato qualcuno in questo forum che CONOSCE come funziona e come gestire il tutto.

 

Dll Hell è un vecchio problema ben noto, e i modi per risolverlo, a livello utente, sono ben noti.


Ma provate a spiegare come questo problema si collega al terminale?


Ho il sospetto che tu abbia scremato questo wiki e non abbia ancora afferrato l'essenza del problema. Per sicurezza, lasciate che vi ricordi: "L'essenza del problema è un conflitto di versioni di DLL destinate a supportare certe funzioni. DLL hell è un esempio di un cattivo concetto di programmazione, che, come una miniera nascosta, porta a un forte aumento delle difficoltà con la complicazione e il miglioramento del sistema" (ho preso la descrizione dal wiki russo, dato che il popolo russo segue la nostra discussione).


Quindi, come si relaziona Dll Hell con il terminale? E inoltre, come possono aiutare regsvr32 o FreeLibrary contro questo problema?

 
HideYourRichess >> :

Dll Hell è un vecchio problema ben noto, e i modi per risolverlo, a livello utente, sono ben noti.


Ma provate a spiegare come questo problema si collega al terminale?


Ho l'impressione che tu abbia dato un'occhiata a questa wiki e ancora non capisci il problema.


Quindi come si relaziona Dll Hell con il terminale? E inoltre, come possono aiutare regsvr32 o FreeLibrary contro questo problema?

Di nuovo, frasi generiche e nessuna specifica, solo commenti sprezzanti. DLL Hell non è direttamente correlato al problema, è solo correlato alla tua affermazione che sai tutto su DLL, che non ci sono problemi e che chiunque sia intelligente può evitare QUALSIASI problema con DLL attraverso lo studio ponderato di qualche bacino senza nome. Ho risposto al resto delle domande sul problema di cui sopra, con citazioni e link. A differenza di te.

 
AlexEro >> :

Di nuovo, frasi generiche e nessuna specifica, solo rancore. DLL Hell non è direttamente collegato al problema, si riferisce solo alla tua affermazione che sai tutto su DLL, che non ci sono problemi e che tutti coloro che non sono stupidi dallo studio ponderato di qualche doku senza nome possono evitare QUALSIASI problema con DLL. Ho risposto al resto delle domande sul problema di cui sopra, con citazioni e link. A differenza di te.

Ti sei offeso?! Dai, prendi il mio esempio, non faccio attenzione ai tuoi meschini tentativi di umiliare il tuo interlocutore.


E non c'è davvero nulla di complicato in dll, se si sa quale rastrello non si deve calpestare, soprattutto è semplice nell'implementazione offerta dalle mega quote.


Non volete ammettere che l'unico modo per evitare problemi con la dll è scrivere questa stessa dll in modo competente - è stupido. Di quali riferimenti avete bisogno qui è impossibile da capire.

 

Nella mia esperienza personale, non ci sono problemi con le librerie dinamiche (quando si scrive in delphi e c++). Li ho fatti rilasciare immediatamente dopo aver disabilitato gli indicatori che li utilizzavano. Una rapida disconnessione dell'indicatore + sostituzione della dll è sempre riuscita.

Non userei FreeLibrary solo perché il mio codice _non_ chiama esplicitamente LoadLibrary - non ho intenzione di correggere gli errori di qualcun altro (se sono riproducibili e non legati al mio codice - è più facile informare gli sviluppatori).

Ho seri dubbi che questo problema sia il risultato di un codice di terze parti (windows o mt) che non funziona correttamente.

 

Saluti a tutti!

L'argomento si è fatto interessante e ho deciso di verificare l'argomento discusso su un semplice esempio che viene fornito con il terminale(progetto DLLSample).

Dopo aver compilato in VS 6.0, la dll cotta funziona con il terminale con successo, ma non si scarica!

Ecco la funzione 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);
  }

E ora una domanda agli intenditori che capiscono davvero come è e funziona la dll sotto il vento e sanno come compilarla correttamente in un progetto sotto VS 6.0 (per esempio).

Il prototipo della funzione principale è corretto?

Come gestire i flussi ATTACH/DETACH?

Dove leggerlo e preferibilmente con esempi?

Motivazione: