2010-01-19 4 views
7

J'ai C++ dll en utilisant dans mon C# projet, il a fonctionné très bien sur ma fenêtre machine xp, mais quand je copie mon projet de débogage sur Windows Server 2003 (x64), j'ai reçu erreur ci-dessous, quelqu'un peut-il me dire quel est ce problème, et comment puis-je le réparer.System.DllNotFoundException: Impossible de charger la DLL sur Windows 2003

Merci

"System.DllNotFoundException: Impossible de charger 'lib.dll' DLL: Cette application n'a pas pu démarrer car la configuration de l'application est incorrecte Réinstaller l'application peut résoudre ce problème."

+0

Est-ce que 'lib.dll 'est présent dans le répertoire de l'application? – leppie

+0

oui, il est, mais l'erreur est toujours apparaître .. quelqu'un sait comment résoudre .. je me sens très frustré ... – Rick

+1

Est-lib.dll construit dans le débogage aussi bien? Il peut être essayer de lier avec le débogage C++ qui ne sera pas installé si Visual Studio n'est pas installé sur la machine Windows 2003. – shf301

Répondre

6

Pour Problème de chargement de DLL, je vous suggère d'utiliser l'outil Dependency Walker. Il s'est avéré utile de traiter de tels problèmes car il vous montrera le problème exact.

Si vous possédez Visual Studio 2005, vous pouvez le trouver dans C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exe.

Mise à jour:

MSVCR90D.DLL est la version de débogage du runtime Visual C++ 9.0. Il ne devrait être utilisé qu'à des fins de débogage. Je suggère fortement de construire une version de votre bibliothèque afin d'éviter le problème de chargement de DLL. Cependant, si vous avez absolument besoin de déployer la version de débogage, vous trouverez toutes les DLL requises dans C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86.

+0

Merci! Votre réponse m'a beaucoup aidé. Dépendance Walker est arrivé à la racine du problème. – vfilby

+0

C'est le ticket. J'ai lutté avec ce problème dans unity3d depuis une semaine maintenant. –

11

Il se plaint qu'il a du mal à localiser les dll CRT. Vérifiez d'abord que la DLL contient le manifeste requis. Dans Visual Studio, Fichier + Ouvrir + Fichier, sélectionnez la DLL et vérifiez qu'elle contient un noeud RT_MANIFEST. Le problème suivant est que vous ne pouvez pas déployer une version de débogage de votre DLL. Il aura une dépendance sur la version de débogage du CRT, vous ne pouvez pas l'installer sur la machine cible.

Soit la deploy version Release de votre DLL ou compilez le DLL avec l'option/MT de sorte que le CRT est lié statiquement. Projet + Propriétés, C/C++, Génération de code, Bibliothèque d'exécution. Cela ne fonctionnera pas si la DLL a été compilée avec l'option/clr.

1

sonne comme vous ne l'avez pas installé le runtime Visual C++ sur la machine cible. Vous pouvez l'installer à partir de here Comme il semble que vous utilisiez les versions de débogage de ces DLL, vous devrez peut-être d'abord créer votre application en mode de lancement? This post et this one ont d'autres suggestions qui pourraient aider ...

2

Est-lib.dll une DLL 32 bits? Votre programme C# s'exécutera en mode x64 mais ne pourra pas charger les DLL 32 bits. Vous pouvez essayer de changer le CPU cible du projet C# en "x86" pour le forcer à fonctionner sous WOW64.

Questions connexes