Comment puis-je résoudre le .NET CF exception “ne Peut pas trouver PInvoke DLL”?
C'est pour tous le C# gourous. J'ai été frapper ma tête sur cette question depuis un certain temps déjà, essayé toutes sortes de conseils sur le net sans succès. L'action se passe dans Windows Mobile 5.0.
J'ai une DLL nommée MyDll.dll. Dans le Madll.h j'ai:
extern "C" __declspec(dllexport) int MyDllFunction(int one, int two);
La définition de MyDllFunction dans MyDll.cpp est:
int MyDllFunction(int one, int two)
{
return one + two;
}
La classe C# contient la déclaration suivante:
[DllImport("MyDll.dll")]
extern public static int MyDllFunction(int one, int two);
Dans la même classe que je vais appeler MyDllFunction la manière suivante:
int res = MyDllFunction(10, 10);
Et c'est là que le truc continue à moi "ne Peut pas trouver PInvoke DLL "MyDll.dll'". J'ai vérifié que je peux vraiment faire PInvoke sur les appels système, tels que "GetAsyncKeyState(1)", a déclaré que:
[DllImport("coredll.dll")]
protected static extern short GetAsyncKeyState(int vKey);
L'MyDll.dll est dans le même dossier que l'exécutable, et j'ai aussi essayé de la mettre dans le dossier /Windows, avec aucun changement ni la réussite. Des conseils ou des solutions sont grandement appréciés.
Assurez-vous que vous avez assez de mémoire virtuelle libre, depuis le P/Invoke importation peut échouer.
Les deux projets sont dans la même solution, et ils sont déployés, pas besoin de télécharger manuellement.
Dans ce cas, ajouter le projet de sortie en tant que référence à l'autre. Même si elle ne résout pas votre problème, c'est un bon moyen de gérer les dépendances.
OriginalL'auteur Ignas Limanauskas | 2008-11-26
Vous devez vous connecter pour publier un commentaire.
Peut-être que cela semble comme une chose évidente pour vérifier, mais êtes-vous de la compilation de la DLL native pour la bonne architecture du PROCESSEUR? IIRC, Windows Mobile fonctionne sur de multiples architectures des processeurs.
Mobile Windows s'exécute sur l'architecture ARM et n'a depuis Pocket PC 2003.
Ahh, d'accord. Était pas au courant de cela. Merci pour la correction.
Pour ceux qui trouver son chemin ici, voir la réponse donnée par Ignasi lui-même pourquoi il a accepté cette réponse.
OriginalL'auteur Michael Trausch
J'ai le même problème, mais cette fois, il n'y a pas de différence évidente dans les plates-formes concernées. Pourquoi est-ce quelque chose qui est censé être "normal" est si mal documentés, donc difficile et le pire de tous, afin de "feuilletée'.
Existe-il des outils qui me permettent d'aller sur mon PPC émulateur, et l'arrêt par étape de vérification (a) que la dll est l'endroit où CLR n'attend que ça (j'ai mis les deux dans le même répertoire, et le répertoire windows sur l'émulateur - je peux le voir, il est là avec les émulateurs de l'explorateur de fichiers), (b) que CLR peut la charger (a assez de mémoire, etc), (c) que CLR est alors possible de trouver quelles fonctions sont présentes (utile si je peux aller au delà de la stupide 'ne peut pas trouver la dll erreur")
J'aimerais forcer les Portes, ou tout du "windows mobile" de l'équipe de l'utilisation de la merde qu'ils créent.
OriginalL'auteur
L'exception que vous avez énuméré et pinvoke signature que vous mettez dans la question ont des noms différents: MyDll.dll et ThreadBenchLib.dll respectivement. Était-ce une faute de frappe ou le problème?
Si ce n'est pas le problème, essayez d'ouvrir le fichier DLL dans dépend. Il est possible que le chargement des DLL qui est défectueux en raison d'une dépendance non satisfaite.
OriginalL'auteur JaredPar
Je vais avoir le même problème. J'ai utilisé le Depends.exe à regarder pour WinCE dll dépendances, et Il dépend de la dll de débogage. (MSVCR90D.dll)
Pour résoudre le problème j'ai compilé une version, et de confirmer les dépendances, après qu'il fonctionne très bien.
J'espère contribuer à
OriginalL'auteur user2321654