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.

Avez-vous ajouté de la dll comme une référence dans votre projet? Si vous le faites, alors vous n'aurez pas besoin de copier le fichier manuellement. Si le problème persiste, alors il est probablement dû à la dll fichier n'est pas correctement conçu (plate-forme différente, peut-être).
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