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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top