Ne pouvez pas trouver PInvoke erreur de DLL dans Windows Mobile
Je vais avoir beaucoup de mal à faire un scénario de base pour fonctionner sur windows mobile 5.0 émulateur. J'ai une application winforms qui a finalement appels en code natif. Déploiement fonctionne très bien et toutes les Dll natives sont copiés dans le même dossier que les winforms .exe. J'ai aussi vérifié c'est le cas du Fichier Distant outil Observateur.
Cependant lorsque je lance mon application, il échoue toujours avec "impossible de trouver PInvoke dll -- Système.MissingMethodException" erreur (quand vient le temps de remettre en code natif, l'attribut DllImport est rendu inutile). Je savoir que le natif de la dll se trouve dans le même dossier que l'exécutable. Quoi de plus dois-je faire?
Je suis avec VS 2008.
OriginalL'auteur Dilip | 2009-09-21
Vous devez vous connecter pour publier un commentaire.
D'étendre Jared réponse, quatre raisons les plus courantes pour obtenir un MissingMethodException alors que P/Invoquant dans les FC:
Avez-vous vérifié la DLL points d'entrée sont sans décor avec quelque chose comme dumpbin?
OriginalL'auteur ctacke
Donné le message d'erreur il y a généralement un des 2 problèmes
__declspec(dllexport)
Aussi, la santé mentale est de s'assurer que le nom de la DLL est orthographié correctement et manque l' .dll suffixe.
Savez-vous aussi de savoir pourquoi je ne peut pas le mettre en place correctement:blogs.msdn.com/netcfteam/archive/2005/07/24/442609.aspx j'ai utilisé la télécommande de l'éditeur du registre à mettre dans toutes les requis des clés et le fichier journal n'est toujours pas créé. Aujourd'hui doit être de tous les mudane-choses-must-go-mauvais jour!
Pour info, cela fonctionnera très bien avec ou sans les "dll" suffixe, mais vous devriez être cohérent dans la chaîne exacte que vous transmettez (j'utilise un const): danielmoth.com/Blog/2007/12/be-consistent-with-dllimports.html
Tous les conseils sont loin d'être ce que j'ai utilisé pour résoudre ces dans le passé. J'ai deux choses à essayer. 1. Pour permettre à l' .NETCF journalisation essayer de définir une valeur DWORD sous la dernière clé et la valeur de la clé. J'oublie la combinaison travaillé pour moi, mais je l'ai rappelé il me confond, encore n'a - e.g [HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging] "Activé" = 1. 2. Essayez d'utiliser une version compilée de la version de votre Dll natives. Nous avons eu un peu de Dll qui a refusé de P/Invoke leurs versions de débogage. Ne jamais résolu, probablement une accumulation de l'interrupteur.
OriginalL'auteur JaredPar
Votre problème est dû au fait que WM5 de gestion mémoire est de la merde. Les dll sont chargées à partir du haut de la fente vers le bas tandis que les applications sont chargées à partir du bas vers le haut. Si vous n'avez pas assez d'espace entre votre application et de votre fichier DLL, vous recevrez un "ne peut pas pinvoke" erreur.
WM5 alloue 32 slots de 32 mo pour les applications à exécuter.
Chaque fois WM5 alloue de la mémoire pour les dll, il utilise un minimum de bloc de 64 ko, donc si votre fichier DLL est 32K, il faudra de 64 ko, si votre DLL prend 68k puis WM5 va allouer 2x64Kb — 128 ko.
Quand WM5 charge la DLL requis, il sera toujours charger en bas de l'adresse de l'previsouly chargé de l'app, c'est à dire si l'application 1 a chargé 2×30 ko Dll, le premier sera chargé à l'adresse 0 à 64 ko, le deuxième à partir de 64 à 128, votre application va charger ses Dll à partir de 128 ko, pas de 0, même si vos applications s'exécute dans un autre emplacement.
Afin de faire fonctionner les choses, vous devez charger votre application tôt ou supprimer non nécessaires, les applications du windows starup dossier.
OriginalL'auteur Alain Holloway
La DLL que vous utilisez n'a pas de définition de la méthode que vous appelez.
si l'exception se produit..
il compile bien.. seulement au moment de l'exécution de problème..
la solution est que vous devez assurez-vous que la définition est présente dans la DLL ou pas,que vous devez aller pour certains autres dll.
OriginalL'auteur Naruto