Système.DllNotFoundException: Impossible de charger la DLL. Pas d'erreurs dans Dev machine, mais erreur dans les ordinateurs cibles
J'ai construit une application en C# avec WPF sur Visual Studio 2012 qui utilise la DLL C++ et les cibles .NET4.5. J'ai deux projets en cours d'exécution, l'un pour le projet C# et l'autre pour le C++ DLL projet. J'ai sorti les deux projets dans un dossier qui a un .exe
pour C# et un .dll
pour C++ dans le même dossier.
J'ai lancé sur ma machine où ils ont été développés et tout fonctionne bien. Je lance le .exe
dans d'autres machines et des il jette cette exception:
Système.DllNotFoundException: Impossible de charger la DLL
C'est de ne pas reconnaître la DLL dans le même dossier.
J'ai essayé beaucoup de choses et rien ne semble fonctionner. J'ai suivi la solution dans ce post mais rien n'a fonctionné.
De Dev et de la machine Cible sont identiques. En Dev, Visual Studio 2012 est installé, mais c'est la seule différence.
Code:
C#:
[DllImport(@"Wireless.dll", EntryPoint = "?cert_exists@certificate@CertFuncs@@SAHHPBD@Z", CallingConvention = CallingConvention.Cdecl)]
static extern int cert_exists(int store, [MarshalAs(UnmanagedType.LPTStr)]string cert_str);
C++:
static int __declspec(dllexport) cert_exists(int type, LPCSTR cert_str);
Mise à jour:
Si j'installe Visual Studio 2012 sur la machine cible, tout fonctionne bien. Si je le supprime, l'application se bloque de nouveau. Toutes les idées sur ce que VS en ajoutant que peut faire la demande de travail?
Est le C++ C++ géré ou non géré? Comment êtes-vous référant à partir de l'application en C#?
C++ n'est pas géré. J'ai ajouté un peu de code.
Donc, vous avez un répertoire de déploiement, avec l'exe et la dll, ce qui (1) est séparé de la dev répertoires, (2) d'œuvres sur le dev de la machine, mais (3) ne fonctionne pas sur la machine de l'utilisateur?
Les deux machines sont sous Windows 7 64 bits, ils sont identiques en provenance de la même image
OriginalL'auteur Maher Manoubi | 2013-01-29
Vous devez vous connecter pour publier un commentaire.
Juste une supposition: l'installation de Microsoft Visual C++ 2012 Redistributable Package sur la machine de l'utilisateur. Le natif de DLL que vous utilisez peut avoir d'autres dépendances qui doivent être installés (essayez Dependency Walker). Si la DLL native nécessite par exemple, les paramètres de registre, les fichiers de configuration, etc. ceux-ci devraient également être présents. Il devrait être distribué à l'utilisateur des machines de la même manière que vous l'avez installé sur la machine de dev.
Hmm... j'ai édité ma réponse, s'il vous plaît vérifier. De toute façon, est la DLL native accessible au public?
J'ai ajouté de l' .DLL ici: dropbox.com/sh/6m3tjubd1nsm7td/knxippcGpo
Walker a été de me dire que l'application de la dll est le ciblage des différents CPU, mais ce n'est pas vrai parce qu'ils ont le même PROCESSEUR
OUI. C'est le Visual C++ Redistributable version x86 et pas le x64 qui résout tout!! En gros, sans que le système ne permet pas de lire x86 dll. La seule autre façon est de distribuer les dll de la version x64, mais qui me donnait encore plus de questions, je vais avoir des clients d'installer le VC++ x86 . Je vous remercie beaucoup pour l'aide 🙂 j'apprécie vraiment.
OriginalL'auteur kol
Cela est dû à votre projet de construction de configuration étant "Debug"(clic Droit sur la solution "-> propriétés -> " propriétés de configuration -> Vous devriez voir tous les projets de configuration mis à 'Debug'). Il nécessite visual studio est installé partout où vous exécutez le fichier exe(qui est intégrée dans le mode "Debug").
Afinde pour éviter cela, modifiez la configuration de "Libération" et de la reconstruction de votre projet.
OriginalL'auteur rajkumaradass