2010-09-07 5 views
2

Je rencontre exactement le même problème que l'affiche dans ce question. J'ai un projet de studio visuel C# dont j'essaie d'appeler une fonction dans une autre DLL (qui fait aussi partie de la solution).C# dll problème dans Windows 7

La DLL est un C++ et la fonction exportée je suis en train d'appeler est déclarée comme celui-ci en C#:

[DllImport("SomeDLL.dll")] 
private extern static IntPtr SomeFunction(IntPtr someVar1, IntPtr someVar2, bool someVar3); 

Lorsque je tente d'appeler la fonction de C# Je vois ce qui suit sur la console sortie dans le débogueur:

'MyApp.exe': Loaded 'C: \ SomePath \ Construction \ Eddy \ Debug \ SomeDLL.dll'
'MyApp.exe': Déchargé « C: \ SomePath \ Build \ Eddy \ Debug \ SomeDLL.dll '
'MyApp.exe': Chargé 'C: \ SomePath \ Build \ Eddy \ Debug \ SomeDLL.dll'
'MyApp.exe': déchargé 'C: \ SomePath \ Build \ Eddy \ Debug \ SomeDLL.dll '

Et je l'obtenir la boîte de dialogue d'erreur suivant:

Impossible de charger la DLL 'SomeDLL.dll': le module spécifié n'a pas pu être trouvé. (Exception de HRESULT: 0x8007007E)

Le code en question fonctionne très bien sur mon windows XP collègues machine. Il y a aussi une autre DLL C++ dans la solution qui fonctionne bien.

+0

Comme vous l'avez marqué Windows 7 - 64 bits, est-il possible que votre DLL soit spécifique à 32 bits ou qu'elle soit dépendante d'une DLL 32 bits. Vous pouvez essayer de construire votre projet pour la plate-forme x86 et vérifier si l'erreur disparaît (juste pour voir si c'est le problème avec 32 bits/64 bits). – VinayC

Répondre

2

Le problème semble être que SomeDll.dll ne peut pas être chargé. Il y a plusieurs raisons différentes pour lesquelles cela peut arriver et certaines d'entre elles sont:

  1. La DLL est 32 bits et vous exécutez un processus 64 bits (ou l'inverse).
  2. SomeDLL.dll possède des dépendances supplémentaires (autres composants dll: s ou COM) qui ne sont pas disponibles.

Vous pouvez exécuter Dependeny Walker: http://www.dependencywalker.com/ sur votre fichier somedll.dll pour voir si c'est le point 2 qui pose problème.

+0

La DLL qui ne fonctionnait pas avait des dépendances avec d'autres DLL, lorsque je les ai copiées dans le répertoire de travail de mon projet C#, tout a bien fonctionné. –