2010-06-21 4 views
1

Cela doit être une question vraiment stupide, mais je suis toujours très vert quand il s'agit de C#.Où placer une DLL non managée à utiliser pour l'importation dans un programme C#?

Quoi qu'il en soit, j'ai une DLL et j'importer avec une ligne comme celle-ci:

[DllImport(@"MyCoolDll")] 

J'ai soulevé ce droit de l'application de démonstration fournie par le vendeur, mais il continue à se plaindre qu'il ne peut pas trouver la DLL. L'erreur réelle (à partir de Visual Studio 2010) est comme ceci:

Unable to load DLL 'MyCoolDll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 

J'ai essayé de placer le DLL compilé dans le répertoire bin/debug et les dossiers bin/release. J'ai même essayé de le copier sur system32, mais rien ne semble fonctionner.

Des idées?

Répondre

4

Votre DLL peut avoir des dépendances qui doivent également être chargées. Avez-vous vérifié pour cela?

+0

Bonne idée. Comment pourrais-je vérifier cela? –

+0

DependencyWalker est un outil astucieux qui vous dira quels sont les autres modules (DLL, pilotes, etc.) dont vous avez besoin pour charger une DLL donnée. Obtenez-le ici: http://www.dependencywalker.com/ – CesarGon

+0

Merci, cela a fait l'affaire. –

3

Je sais que vous devez donner le nom de fichier complet. Donc

[DllImport(@"MyCoolDll.dll")] 

Il devrait fonctionner depuis les dossiers bin \ debug ou bin \ release.

Mise à jour

This est où j'ai appris comment importer des fichiers DLL non gérés. Si c'est une application de test qui fonctionne correctement, vérifiez son dossier bin \ debug pour voir ce qui est différent du vôtre. Peut-être qu'un dll supplémentaire est référencé? Vérifiez également toutes les références dans l'exemple d'application pour vous assurer que vous n'en manquez pas.

+0

Malheureusement, cela n'a pas aidé. De plus, le code fourni par le fournisseur fonctionne sans l'extension. –

+0

@Quand le code du fournisseur fonctionne, pourquoi vous poseriez-vous la question sur le débordement de la pile? Le tutoriel ne doit pas être exactement précis, peut-être un problème avec la DLL elle-même? – jsmith

+0

Ce n'est pas un tutoriel, plus d'une application de test pour vérifier l'intégrité, je suppose. Je pose la question parce que ma copie textuelle n'a pas fonctionné. Merci pour le lien si. –

0

Pour autant que je sais que vous devez fournir l'extension:

[DllImport(@"MyCoolDll.dll")] 

Je garde habituellement ces dll localement avec les binaires du programme (donc dans bin \ Debug pour le développement)

0

La clé pour moi était pour regarder les chemins répertoriés dans la sortie de la console Visual Studio Build, pour voir où les fichiers binaires ont été placés. Une fois que j'ai trouvé cela, je savais où copier la DLL non managée et il a corrigé l'erreur "Impossible de charger la DLL".

Questions connexes