DLLimport impossible de charger la dll
Je suis en utilisant une dll non managée en rpc qui je appeler à partir de mon C# web du projet. Il fonctionne très bien sur mon localhost, mais ne fonctionne tout simplement pas sur mon hébergement mutualisé, winhost. Il se passe lorsque j'essaie d'utiliser l'un de la fonction dans la dll.
Le message d'erreur que j'obtiens est:
"Impossible de charger la DLL 'dllTest.dll': L'application n'a pas pu démarrer
parce que son side-by-side de configuration est incorrecte. Consultez l'
journal des événements d'application ou d'utiliser la ligne de commande sxstrace.exe outil pour
plus en détail. (Exception de HRESULT:
0x800736B1)","erreurs":[{"name":"DllNotFoundException","message":"Impossible
de charger la DLL 'dllTest.dll": L'application n'a pas pu démarrer car
son side-by-side de configuration est incorrecte. Consultez l'
journal des événements d'application ou d'utiliser la ligne de commande sxstrace.exe outil pour
plus en détail. (Exception de HRESULT: 0x800736B1)"}]}
Je suis se douter que c'est un problème de chemin d'accès. La dll en question, dllTest.dll est placé dans mon dossier bin. Je ne suis pas sûr de l'endroit où il est à la recherche de la dll, mais est il possible que je peux spécifier un chemin d'accès pour la recherche de la dll. Je ne peux pas trouver un moyen de spécifier un chemin d'accès relatif à la dll.
Je ne pense pas que c'est un problème de dépendance parce que mon dllTest.dll est juste un test simple et elle ne contient qu'un simple ajout d'une fonction.
Ou ne pouvait pas y avoir d'autres causes?
Merci pour l'aide.
- Pourrait-il être un x86 vs x64 problème? Aussi, j'ai couru le dependency walker sur elle et assurez-vous que la DLL n'était pas un manque à une de ses dépendances (même si c'est un coup de poignard dans le noir).
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que votre DLL C++ exige que les bibliothèques CRT être installé afin de fonctionner. La partie en gras de la message d'erreur est ce qui vous donne l'astuce:
Qui explique pourquoi tout est bien sur votre machine de développement, ils sont déjà installés là-bas parce qu'ils ont été installés avec vos outils de développement—et pourquoi il ne fonctionne pas sur le serveur de production, qui n'a pas la CRT transmissibles installé.
Vous devez télécharger le package redistribuable pour la version de Visual Studio que vous avez compilé le fichier DLL avec. Par exemple, si vous utilisez Visual Studio 2010, vous pouvez télécharger la version 10 de la CRT redistribuable ici.
Alternativement, vous pouvez compiler la DLL avec le runtime des bibliothèques statiquement liés. Pour ce faire, modifiez vos propriétés du projet pour lancer le
/MT
passer à la place de/MD
—(il se trouve dans l'INTERFACE utilisateur sous "Propriétés de Configuration" -> "C/C++" -> "Génération de Code" -> "Runtime Library").