2016-07-19 6 views
0

À partir d'une application .NET CF 3.5 j'essaye de PInvoquer le 'i2csdk.dll' qui se trouve dans le répertoire \ Windows sur mon périphérique Windows CE 7. Lorsque je tente d'exécuter le PInvoke, j'obtiens une 'System.MissingMethodException' avec des informations supplémentaires. Impossible de trouver la DLL PInvoke 'i2csdk.dll'. Le PInvoke de n'importe quelle fonction de coredll.dll et de ceddk.dll fonctionnent bien, qui sont tous deux situés dans le répertoire \ Windows à côté de i2csdk.dll.Win DLL Importation depuis WIndows throws MissingMethodException

J'ai vérifié que i2csdk.dll est effectivement présent dans \ Windows pendant l'exécution.

Je sais également que la DLL i2csdk.dll est compilée correctement car lorsque je copie le fichier i2csdk.dll dans le même répertoire que mon application, l'appel aboutit. Cela me dit également que cette DLL ne dépend pas d'une autre DLL.

Ai-je raté quelque chose? Y at-il une sorte d'étape d'enregistrement de DLL qui doit se produire?

+1

Si vous avez marqué cette question, veuillez ajouter un commentaire. J'apprécierais les commentaires. Cela ne me dérange pas de le reformuler ou de le clarifier. – Hawkez

Répondre

1

Vous pouvez utiliser le séparateur de dépendances pour voir quelles méthodes sont exportées depuis cette DLL ou, si vous le construisez vous-même, vous pouvez vérifier le fichier .def. Si la DLL est implémentée en C++ et que vous utilisez les attributs dllexport, les noms de fonctions réelles sont "mutilés", en ajoutant des décorations utilisées pour différencier les surcharges de la même fonction de base. "bloquer, et je suggère fortement d'utiliser le fichier def à la place pour éviter les mauvaises exportations. Si la DLL se trouve dans votre dossier \ Windows cela signifie généralement qu'il fait partie de l'image du système d'exploitation, s'il a été inclus en tant que module en mode kernel (en utilisant l'indicateur K dans le fichier bib) application.

+0

Merci pour la clarté. La DLL est un fichier système et il est marqué avec un K dans la section type du fichier bib afin qu'il soit l'espace noyau. C'était le problème. [Les autres peuvent voir plus d'informations sur le fichier bib ici.] (Https://msdn.microsoft.com/fr-fr/library/ee479063.aspx) – Hawkez