CHECKDLL
La specifica verifica l'esistenza di una DLL e può restituirne il percorso.
Per poter specificare, da programma BC, una path di ricerca delle DLL di programma diverso da quello normalmente utilizzato in fase di esecuzione dei programmi e disponibile la variabile di utilizzo interno: PHDLL$[256].
La variabile PHDLL$ è impostata al valore di PHP ogni volta che viene letto il file PROFWS<stazione>.
Nel caso in cui si abbia la necessità di forzare il percorso di ricerca, si potrà agire sulla variabile PHDLL$ valorizzandola in modo opportuno.
La variabile potrà contenere più direttive, separate dal carattere ';' e la ricerca della DLL prenderà in considerazione queste direttive in ordine. In caso di errore nel caricamento della stessa (DLL non trovata) si procederà a ricercarla secondo il percorso sopra elencato.
Parallela alla variabile PHDLL$ esiste la variabile PHDLLP$[256] che contiene il percorso di ricerca delle DLL personalizzate.
La variabile PHDLLP$ è impostata al valore di PHB$+'\PROGPERS\' in avvio del programma.
Il criterio di ricerca delle DLL può essere sintetizzato come segue:
- le cartelle indicate in PHDLLP$;
- le cartelle indicate in PHDLL$;
- la cartelle da cui l'applicazione è stata lanciata;
- la cartelle corrente;
- la cartelle di sistema di Windows (per Windows NT/2000/XP il nome della directory è System32);
- la cartelle di sistema di Windows a 16-bit (il nome della directory è System);
- la cartelle di Windows;
- le cartelle elencate nella variabile d'ambiente PATH.
La ricerca della DLL avviene inizialmente nelle cartelle indicate da PHDLLP$. In caso di errore nel caricamento della stessa (DLL non trovata) si procederà a ricercarla secondo il percorso sopra elencato. Solitamente la ricerca termina al punto 2, in quanto le DLL di prodotto sono presenti nella direttiva PHDLL$.
Parametri
| Parametro | Definizione | I/O | Versione traduttore | SMP | |
|---|---|---|---|---|---|
| NOME | Stringa | ||||
| FUNZIONE | Stringa | ||||
| DIR | Stringa | ||||
| PERS | Intero | ||||
| VER | Intero | ||||
| ERRORE | Intero |
NOME
Nome della libreria da controllare, senza estensione.
FUNZIONE
Specifica la funzione di libreria da controllare.
PERS
Cerca la DLL solo tra i progetti di personalizzazione. Non modifica l'ordine di ricerca, ma può attivare/disattivare percorsi.
VER
Versione della funzione da cercare.
0 cerca la versione predefinita.
L'utilizzo del parametro implica l'utilizzo del parametro FUNZIONE
ERRORE
Consente al programma di intercettare e gestire l'errore restituito dalla funzione.
Utilizzare uno dei metodi GetLastError*() della classe BCContextInfo per ottenere le informazioni dell'errore.
Errori
| Codice | Descrizione |
|---|---|
| 25904 | Attenzione! La libreria {ex.AssemblyName} non esiste. Direttiva corrente: {ex.Directory} L'esecuzione del programma viene terminata. |
| 25903 | Attenzione! Non e' stata trovata la funzione '{ex.SbcName}' dentro la libreria {ex.AssemblyName}! L'esecuzione del programma viene terminata. |
| 25900 | Attenzione! Non e' possibile caricare la libreria <Nome Libreria>.DLL! La libreria non e' un'applicazione valida per Windows Il file potrebbe essere danneggiato. Codice di errore NNN. L'esecuzione del programma viene terminata. |
| 25901 | Attenzione! Non e' possibile caricare la libreria <Nome Libreria>.DLL! La libreria riferisce una o più librerie che non sono state trovate o sono errate. Codice di errore NNN. L'esecuzione del programma viene terminata. |
| 25902 | Attenzione! Non e' possibile caricare la libreria <Nome Libreria> .DLL! Errore NNN. L'esecuzione del programma viene terminata. |
| 25905 | Controllo correttezza parametri. Non e' stata indicata alcuna libreria da controllare. |
Esempi
Controllo esistenza DLL
DIM messErr[STRING] = BCContextInfo.GetLastErrorMessage()
DIM dirDLL[STRING] = ""
'@CHECKDLL NOME["BC32SIGN"] DIR[dirDLL] ERRORE[Errore]
If Errore = 0 Then
MESSAGEBOX(#INFO,"Libreria DLL","Trovata la libreria BC32SIGN.dll nella direttiva " + dirDLL)
Else
MESSAGEBOX(#ERRORE,"Libreria DLL","La libreria BC32SIGN.dll non è stata trovata" + messErr)
EndIf