2017-07-22 4 views
-1

Je veux utiliser du code C++ dans une application C#, j'ai donc écrit une DLL en C++. Parce que c'est la première fois que je crée une DLL C++, j'ai commencé par créer une DLL 'test'. Voici le codePourquoi mon application C# ne peut-elle pas charger ma DLL C++?

extern "C" 
{ 
    __declspec(dllexport) void DisplayHelloFromDLL() 
    { 
     printf("Hello from DLL !\n"); 
    } 
} 

Que je fait une très simple application C#:

class DllTest { 
    [DllImport("Test.dll")] 
    public static extern void DisplayHelloFromDLL(); 

    public static void UseDll() { 
     DisplayHelloFromDLL(); 
    } 
} 

Après, j'ai construit des applications et déplacé le fichier exécutable et le dll dans le même dossier. Mais quand je courais l'exécutable, il a montré le message suivant:

exception non gérée: System.DllNotFoundException: Impossible de charger la DLL 'Test.dll': Le module spécifié est introuvable

Répondre

-1
vous

avoir à vérifier la plate-forme cible à la fois dll et exe.

Edit: Lorsque la cible sont différentes l'exception est BadImageFormatException

Vous aurez la DllNotFoundException lorsque la dll ou une de ses dépendances est introuvable. Par exemple, lorsque vous compilez une version de débogage de la DLL avec VisualStudio, elle a besoin des temps d'exécution de débogage (qui ne sont pas installés sur la machine sans l'IDE).

vous pouvez vérifier vos dépendances dll en utilisant le Dependency Walker

Ce outils vous permet également de voir le système ciblé (x86/x64) et les fonctions exportées (utiliser sur le dll, le programme ne vous montrera pas les dépendances [DllImport])

0

vous devez stocker la DLL dans le dossier de débogage. et essayez cette commande pour vérifier que la méthode est exportée correctement

dumpbin /exports Test.dll