La determinazione dell'esistenza di DLL prima di utilizzarlo
-
20-09-2019 - |
Domanda
Utilizzando Visual C ++ 2008 Express Edition. Sto collegando la mia domanda con una libreria di importazione (.lib
) per una DLL che potrebbe o non potrebbe essere presente sul sistema di destinazione. Prima di chiedere:. Non posso distribuire il DLL con la mia domanda
Se la DLL non è presente, non appena io chiamo una funzione dalla DLL (ma non prima!), Ricevo un messaggio del tipo
Questa applicazione non è riuscito ad avviare perché SomeLibrary.dll non è stato trovato. Una nuova installazione dell'applicazione potrebbe risolvere il problema.
Quello che voglio che accada, invece, è che l'applicazione rileva che la DLL non c'è, e semplicemente disabilita la funzionalità che dipende da esso. Potrei fare una chiamata a LoadLibrary
e vedere se è riuscito, ma non sono sicuro se questo è sufficiente. Forse la libreria di importazione fa più lavoro dietro le quinte?
E 'una semplice chiamata LoadLibrary
sufficiente? Se no, che altro devo fare? Può questo essere fatto anche?
Aggiorna : Certo che posso usare LoadLibrary
, e poi GetProcAddress
per ciascuna delle funzioni che voglio usare. Ma questa è una seccatura, e speravo di evitare che e semplicemente utilizzare la libreria di importazione previsto invece.
Soluzione
Questo è ciò che l'opzione del linker DELAYLOAD è per, ma io non so se l'edizione Express supporta esso.
Altri suggerimenti
No, LoadLibrary()
è esattamente quello che vuoi. L'unica conseguenza di utilizzare è il fastidio di impostazione dei puntatori a funzione nella DLL quando si carica correttamente la DLL, ma il processo di ciò è ben coperto, altrove sulla rete.
Se si va controllare qui ( MSDN) si vedrà che quando LoadLibrary
fallisce il caricamento, la funzione restituisce un valore NULL, e si può anche controllare l'errore specifico (che dovrebbe essere un file non trovato) utilizzando la funzione GetLastError
.