Question

Utilisation de Visual C ++ 2008 Express Edition. Je relie ma demande avec une bibliothèque d'importation (.lib) pour une DLL qui pourrait ou ne pourrait pas être présent sur le système cible. Avant de vous demander:. Je ne peux pas distribuer la DLL avec mon application

Si la DLL n'est pas présent, dès que j'appelle une fonction de la DLL (mais pas plus tôt!), Je reçois un message comme

  

Cette application n'a pas pu démarrer car SomeLibrary.dll n'a pas été trouvé. Re-installation de l'application peut corriger ce problème.

Ce que je veux arriver à la place, est que l'application détecte que la DLL est pas là, et désactive simplement la fonctionnalité qui en dépendent. Je pourrais faire un appel à LoadLibrary et voir si elle a réussi, mais je ne suis pas sûr que ce soit suffisant. Peut-être que la bibliothèque d'importation ne plus travailler dans les coulisses?

est un simple appel LoadLibrary suffisante? Sinon, qu'est-ce d'autre que je dois faire? Peut-on même fait?

Mise à jour : Bien sûr, je peux utiliser LoadLibrary, puis GetProcAddress pour chacune des fonctions que je veux utiliser. Mais c'est embêtant, et j'espérais éviter cela et il suffit d'utiliser à la place de la bibliothèque d'importation fourni.

Était-ce utile?

La solution

est ce que l'option de liaison delayload est pour, mais je ne sais pas si l'édition Express prend en charge il.

Autres conseils

Non, LoadLibrary() est exactement ce que vous voulez. La seule conséquence de l'utiliser est les tracas de la mise en place des pointeurs de fonction dans la DLL lorsque vous chargez avec succès la DLL, mais le processus en est bien couvert ailleurs sur le net.

Si vous allez vérifier ( MSDN) vous verrez que lorsque LoadLibrary échoue le chargement, la fonction retourne une valeur NULL, et vous pouvez même vérifier l'erreur spécifique (qui devrait être un fichier non trouvé) en utilisant la fonction GetLastError.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top