come scaricare la dll - pagina 2

 
OneDepo >> :

Non c'è UnloadLibrary() in WinAPI, c'è FreeLibrary().

Hai ragione :-). Il mio MSDN non si è caricato per qualche motivo :-).

.

OneDepo >> :

Il sistema operativo scarica qualsiasi dll solo al valore zero del contatore di carico.

In questo caso l'unica applicazione che carica il dllku è metatrader.

 
jartmailru >> :

In questo caso, l'unica applicazione che carica il dllku è Metatrader.

Non è questo il punto, non mi interessa se sono dieci applicazioni. L'idea è quella di giocare con il contatore, se si vuole veramente, veramente scaricare dll, si dovrebbe cercare di azzerare il contatore. Idea per il topicstarter ;)
 
njel >> :

usando una libreria esterna tramite #import.


Quando scarico l'idnikator, il terminale tiene ancora la dll. come me ne libero?

Scrivere una DLL senza errori. Di solito le DLL si scaricano da sole, a meno che non ci siano imprevisti.


A parte qualsiasi metodo "hacker", questa è l'unica cosa possibile.

 
Windows metterà in cache qualsiasi DLL. C'è un sacco di cache.
 
HideYourRichess >> :

Scrivere la dll senza errori. Di solito la dll si scarica da sola, a meno che non ci siano imprevisti.

Bene, mio caro amico.

Ho l'ultima Dll e ho seriamente deciso di dimostrare che ti sbagli :-).

Ho scoperto che dopo l'uscita dallo script, così come dopo l'uscita dall'indicatore

(chiudendo la finestra o cancellando l'indicatore), la Dll viene scaricata...

Per quanto riguarda l'"alfabetizzazione"... DllMain restituisce sempre stupidamente TRUE.

Ma mi ricordo che circa un anno fa sono dovuto uscire da Metatrader per sostituire la Dll.

OS = WinXP SP3, MT = 225

 

Voi siete strani o qualcosa del genere. Ho avuto questi problemi, che non sono stati scaricati, solo poche volte, ed era sempre dovuto a errori nel codice. Questo è il primo. Il secondo. Lasciate che vi ricordi che Microsoft ha inventato questo meccanismo di caricamento/scaricamento implicito specificamente per semplificare la gestione delle Dll.


Da dove vengono questi strani problemi - mi rifiuto di capire.


Sì, e questo, personalmente non uso DllMain, direttamente.

 
HideYourRichess >> :

Voi siete strani o qualcosa del genere. Ho avuto solo poche volte questi problemi con qualcosa che non si scaricava, ed era sempre dovuto a errori nel codice.


Da dove vengono questi strani problemi - mi rifiuto di capire.


E personalmente non uso direttamente DllMain.

Ecco una citazione da MSDN:
"Quando il sistema chiama la funzione DllMain con qualsiasi valore diverso da DLL_PROCESS_ATTACH, il valore di ritorno viene ignorato".

Cioè, quando scarichi una Dll-in, al sistema non importa assolutamente cosa pensi di te come programmatore lì.

Non può essere scritto correttamente o scorrettamente - se non ci sei dentro, viene fuori e basta. Se possibile.

.

Ma visto che pensi di essere un professionista, probabilmente puoi consigliare i principianti invece di fare tweak.

Non ti vedo scrivere nulla di sostanziale - rimuovi il collegamento dinamico dal progetto,

dipendenze dai pacchetti runtime, gestire con cura le Dll collegate - è improbabile che vengano usate lì, ovviamente.

sono usati lì, naturalmente, e possibilmente lavorano con il sottosistema COM, dove una singola chiamata come OleInitialize può raccogliere

dozzine di Dll di sistema. Poiché tutte queste dipendenze sono caricate in una volta sola... è facile con l'avvio,

ma con la deinizializzazione - per esempio, se sia Dll che Metatrader agganciano le stesse librerie di sistema -

ci potrebbero essere problemi - chi sa cosa c'è nel retro del sistema operativo...

.

Siamo utenti API che agganciano tutte le funzioni Dll attraverso .h / .lib e il caricamento delle librerie,

molto probabilmente accade all'inizializzazione dell'applicazione, non c'è *nulla* che possiamo fare.

Oppure potremmo caricare tutte le librerie da soli e collegare tutte le funzioni dinamicamente a mano.

D'altra parte, tutto dovrebbe andare bene sulla matematica nuda - o su alcune funzioni API.


AlexEro >> :
Windows mette in cache qualsiasi DLL. È una cache molto forte.

A causa di quanto sopra, risulta essere abbastanza vicino alla realtà. Cioè se la dll-ine aggancia le dipendenze -

Allora il sistema operativo non può scaricarla senza caricare l'applicazione che ha caricato questa DLL.

 
jartmailru >> :

Ecco una citazione da MSDN:
"Quando il sistema chiama la funzione DllMain con qualsiasi valore diverso da DLL_PROCESS_ATTACH, il valore di ritorno viene ignorato".

Cioè, quando scarichi una Dll-in, il sistema non fa assolutamente alcuna differenza su cosa pensi di te come programmatore lì.

Non si può scrivere bene o male - se non ci sei dentro, viene fuori e basta. Se possibile.


Ancora una volta, per i particolarmente dotati - se la dll è scritta senza errori - tutto dovrebbe funzionare come dovrebbe. Non c'è un meccanismo speciale per scaricare le librerie che sono caricate dal late linking. È chiaro?! MQL4 non fornisce alcun servizio relativo al caricamento/scaricamento esplicito di Dll tramite Load\FreeLibrary. Allo stesso modo, non c'è accesso a Terminate.

jartmailru >> :

Ma visto che ti consideri un professionista, probabilmente puoi consigliare i principianti invece di fare tweak.

Non ti vedo scrivere nulla di sostanziale - rimuovi il collegamento dinamico dal progetto,

dipendenze dai pacchetti runtime, gestire con cura le Dll collegate - è improbabile che vengano usate lì, ovviamente.

sono usati lì, naturalmente, e possibilmente lavorano con il sottosistema COM, dove una singola chiamata come OleInitialize può raccogliere

dozzine di Dll di sistema. Poiché tutte queste dipendenze sono caricate in una volta sola... è facile con l'avvio,

ma con la deinizializzazione - per esempio, se sia Dll che Metatrader agganciano le stesse librerie di sistema -

ci potrebbero essere problemi - chi sa cosa c'è nel retro del sistema operativo.


Leggi Richter, lo consiglio vivamente. Diventa chiaro che non c'è nessuna magia nel lavorare con le DLL, e le librerie sono sempre scaricate non appena non sono più necessarie per lo spazio degli indirizzi del processo corrente. Questa necessità è determinata dal contatore. Se il contatore non è azzerato al momento di scaricare il programma MQL significa che da qualche parte c'è stato un errore, e un errore grossolano.

jartmailru >> :

Quindi di fatto siamo utenti API che agganciano tutte le funzioni Dll - di solito tramite .h / .lib e il caricamento delle librerie,

molto probabilmente accade all'inizializzazione dell'applicazione, non c'è *nulla* che possiamo fare.

Oppure potremmo caricare tutte le librerie noi stessi e collegare tutte le funzioni dinamicamente a mano.

D'altra parte, tutto dovrebbe andare bene sulla matematica nuda - o su alcune funzioni API.


A causa di quanto sopra, risulta essere abbastanza vicino alla realtà. Cioè, se il dll-ine aggancia le dipendenze -

allora il sistema operativo non può più scaricarla senza scaricare l'applicazione che ha caricato questa Dll.

Gli sviluppatori di MT4 hanno fatto molto bene a non mettere il meccanismo Load\FreeLibrary nelle mani degli utenti. Molto giusto. Tutto dipende dal livello di cultura di programmazione dei commercianti.


E infine, leggete le raccomandazioni della stessa Microsoft - è nero su bianco che, sebbene sia possibile fare complesse dipendenze di dll tra di loro, tutto questo ha i suoi limiti.

 
AlexEro >> :
Windows metterà in cache qualsiasi DLL. >> Fa molta cache.

Non chiamerei il meccanismo di mappatura di una dll in uno spazio di indirizzi di processo un meccanismo di caching. È un processo completamente separato.

 
HideYourRichess >> :

Non chiamerei il meccanismo di mappatura delle DLL in uno spazio di indirizzi di processo un meccanismo di caching. È un processo completamente separato.

Sei un po' strano. C'è persino una directory dllcache nella directory Windows\system32, tutti i sysadmin del mondo scaricano tutte le dll usando regsvr32, e tu racconti favole alla gente qui. Su chi conta? Non ci sono idioti qui.