Domanda:
Mi date qualche informazione sui file .dll di Windows?
Francesco
2008-08-25 01:45:51 UTC
10 punti + 1 al migliore!!!
Grazie 1000, ciao...
Tre risposte:
anonymous
2008-08-25 01:58:30 UTC
DLL è l'abbrevizione di Dynamic Link Library (Libreria a Collegamento Dinamico). Le DLL sono delle raccolte di routines che possono essere chiamate da più programmi e solitamente contengono codice di utilità generale che viene messo a disposizione di più applicazioni. Ciò permette di non inserire codice duplicato in applicazioni differenti. Si possono assimilare le DLL alle unit di Delphi solamente che le prime contengono codice eseguibile, collegabile in fase di esecuzione. In Delphi esistono diversi modi di richiamare funzioni contenute in una DLL: è possibile utilizzare la parola chiave External dopo la dichiarazione del nome della funzione da importare, seguita dal nome del file della DLL che la contiene. Non è necessario che la DLL sia presente in fase di compilazione, ma se questa non sarà presente durante l'esecuzione dell'applicazione si otterrà un errore. Un esempio di procedura importata da una DLL è il seguente



Procedure DLLProcedure1; external 'MYDLL.DLL';



Un'altro modo di richiamare una funzione o procedura contenuta in una DLL è caricando in fase di esecuzione la libreria con l'API di windows LoadLibrary, di recuperare l'indirizzo della procedura o funzione con l'API GetProcAddress, chiamare la procedura attraverso l'indirizzo ottenuto ed infine, quando non occorre più, scaricare la libreria con l'API FreeLibrary. In questo secondo caso è anche necessario dichiarare una variabile procedura del tipo corrispondente alla procedura o funzione da richiamare. Se nell'esempio precedente la nostra procedura avesse avuto una dichiarazione del tipo



Procedure DLLProcedure1(Param1, Param2 : Integer); la variabile procedura avrebbe dovuto essere del tipo Type tdLLProcedure1 = procedure(Param1, Param2 : Integer);

Var DLLProcedure1 : tdLLProcedure1;



A questa variabile deve essere assegnato il valore restituito dalla funzione GetProcAddress nella seguente maniera



...

@DLLProcedure1 := GetProcAddress(Handle, 'DLLProcedure1');

...



dove Handle è l'handle della libreria restituito dalla chiamata a LoadLibrary.



Si consiglia di fare riferimento all'SDK di Windows per le API sopracitate.



La scrittura di una DLL in Delphi non differisce molto dalla scrittura di una normale applicazione. La differenza sostanziale sta nella parola chiave Library che sostituisce Program nell'intestazione della unit. In una DLL le procedure e funzioni possono essere contenute nel file di progetto oppure contenute in unit esterne e la libreria si riduce ad una clausola uses contente le unit con le funzioni e procedure seguita da una sezione Exports con l'elenco delle funzioni o procedure da esportare. Il blocco principale Begin..End di una libreria rappresenta il blocco di codice che viene eseguito come codice di inizializzazione della libreria e viene eseguito ogni qual volta la libreria viene caricata in memoria. Se si vogliono rendere disponibili le routines contenute in una DLL scritta in Delphi anche ad altri linguaggi di programmazione, occorre specificare la direttiva stdcall poichè non tutti i linguaggi supportano la modalità di chiamata ottimizzata "register" utilizzata dall'Object Pascal.



La sezione Exports di una DLL ha la seguente struttura



exports entry1, entry2, ...,

entryn;



Ogni entry è costituita dal nome della routine da esportare (funzione o procedura) seguita da due specificatori opzionali: index e name. Il primo serve a definire un indice numerico per richiamare la routine esportata e può assumere valori tra 1 e 2.147.483.647. Se per una routine non viene specificato un valore per index gli viene assegnato automaticamente un numero tratto dalla tabella di esportazione della DLL. Lo specificatore name è seguito da una costante stringa e specifica il nome con cui verrà esportata la routine. Se non viene assegnato ad una routine uno specificatore name, questa verrà esportata con il nome con cui è stata dichiarata nella DLL, rispettando anche le maiuscole/minuscole. Tornando alla nostra procedura di esempio, potremmo avere una sezione exports di questo genere



exports DLLProcedure1 index 1 name 'DLLProcedure1';



che è equivalente a



exports DLLProcedure1;



se vogliamo esportare la routine con un altro nome



exports DLLProcedure1 index 1 name 'DLLProcedure';



Delphi ci mette a disposizione alcune variabili globali per semplificare la gestione delle DLL. Abbiamo visto in precedenza che il codice contenuto nel blocco principale della libreria viene utilizzato come codice di inizializzazione della libreria stessa, ma esiste un codice di pulizia da eseguire al rilascio della libreria? Esiste. Si può fornire l'indirizzo di una procedura che si occuperà di eseguire il codice di pulizia tramite la variabile ExitProc. Questa viene solitamente impostata in fase di inizializzazione della DLL. Quando la libreria viene rilasciata, viene eseguito automaticamente il codice contenuto nella procedura all'indirizzo contenuto in ExitProc.

Occorre però salvare il vecchio puntatore alla procedu
tirallenta
2008-08-25 03:54:32 UTC
http://it.wikipedia.org/wiki/Dynamic-link_library



NON PRENDERE SUL SERIO QUELLO CHE C'È SCRITTO SOTTO



__________________________________________________



Ok facciamo helpdesk, e scusa la risposta lunga, ma ci voleva........CASPITA



sperando che qualcuno non ti abbia già risposto le solite minchiate che dll sta per Dynamic Linked Library, libreria a collegamento dinamico. Su questo argomento ha già scritto Steve Ballogard su PCProfessional US Edition, e Benjamin Stafford su PCMagazine UK, che tra l'altro lavorava in Microsoft nella sezione Security. Se vuoi ti mando i riferimenti ad un libro su "Ottimizzazioni Windows - Leggende e Verità" Mondadori/Microsoft Press



Guarda che la tua domanda non è poi così fuori tema io posto, e sono il moderatore di it.comp.windows.secrets_extension e ciao auguri a quanta gente sta male per questo argomento



se hai un HD piccolo, e al giorno d'oggi anche con 20Gb non stai tranquillo ma perchè ti devi tenere sta spazzatura



scusa lo sfogo, cerco di spiegare...



Le dll sono file creati dal sistema operativo quando la condizione del kernel riferisce alla CPU che il sistema è in fase di Stack cerco di spiegartelo in breve, in parole povere anche se più di tanto (non so se riesco ad usare termini che non sono tecnici)....dunque



la ridondanza (cioè il flusso) di informazioni che assale la CPU deve essere messa in attesa in attesa di essere elaborata perchè i cicli di operatività (hai presente i mhz?) devono rispettare delle sequenze quando un processo fondamentale, ad esempio un programma che sta pesantemente occupando le risorse di sistema chiede...scusa meglio dire manda, informazioni alla CPU per essere elaborate, la partizione logica (occhio non quella estesa) analizza le priorità e decide quali applicazioni possono impegnare il processore, con quale priorità e con quale tipologia di accesso



Fai finta di avere un imbuto intelligente che sa riconoscere con quanta forza stai cercando di travasare il contenuto di una botte dentro una bottiglia ecco che allora la partizione logica della CPU cerca di gestire il flusso di dati che aspetta di essere elaborato



è evidente che il flusso provocato da una botte, in termini di volumi, non può passare attraverso un imbuto piccolo e finire in una bottiglia



ecco che il registry detonator applica le regole e dice qui passano, che so, 2Gb al milli secondo tu me ne stai chiedendo 2,8 ecco che tutto quello che eccede viene salvato in una cache temporanea, in pratica un parcheggio momentaneo, e viene salvato con l'estensione dll



la cosa buffa è che tu hai ragione, questi file sono di importanza notevole, nel senso che tu non puoi spegnere windows finchè questi file non sono stati ripescati dal parcheggio e sistemati a dovere attraverso una elaborazione della CPU dentro il kernel di stack buffer (hai presente quando win ci mette un casino a chiudersi) ecco questo è uno di quei casi win sta prendendo tutte le dll (che diciamo sono come file temporanei parcheggiati) e li elabora rimettendoli al suo posto se l'applicazione che li ha generati è già stata terminata può succedere che questi file dll restino (diciamo così) incompleti nella cartella System o System32



tiriamo le somme tu puoi cancellare tranquillamente tutti i file dll perchè comunque sono residui di elaborazioni di sessioni precedenti



il problema è che a volte win non te lo permette e allora il mio consiglio è di lasciarli nella posizione originale



ma quando il sistema lo permette, quello è spazio perso



il fatto è che un sacco di gente si fa ***** su ***** sulla utilità delle dll quando in realtà non sono altro che un retaggio del vecchio dos, che cercava di proteggersi da cancellazioni accidentali



uffff



oltretutto da win 98 second edition (win98se) c'è un tool di protezione interno che crea problemi ad alcune applicazioni come tipo gli antivirus, e ti impedisce la cancellazione di tutte le dll almeno quelle relative all'hardware



un ultimo consiglio se hai montata una scheda audio che ha meno di 2 anni non cancellare le dll che cominciano per x, y e z
Franco
2008-08-25 01:59:47 UTC
domanda trooopo generica

i file .dll

sono delle librerie condivise

cioe dei pezzi di codice compilato

che vengono usati dai file eseguibili (di solito .exe)

per fare delle operazioni ripetitive

quindi piu eseguibili possono usare lo stesso file dll


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...