IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#]Comment utiliser P/Invoke ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Par défaut [C#]Comment utiliser P/Invoke ?
    J'ai un problème avec P/Invoke. En fait je n'arrive pas du tout a l'utiliser. Je voudrait utiliser, pour commencer, avec ma propre Dll.
    Mais je n'ai pu trouver que des exemples qu'avec des Dll système de Windows. (Comme user32.dll). J'ai essayé de mettre ma Dll un peu partout, répertoire : de debug, de release, system32... (Ça ne fait pas pro, hein ? Je tâtonne, désolé ) Rien n'y fait.
    C'est une fonction toute simple pour essayer. Juste une factorisation en C++. Rien de bien sorcier, pas de dépendances, rien.. Voila le code de Facto.dll, en c++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int facto(int x){
       if(x>1){ return facto(x-1)*x;}
       else{ return 1;};
    };
    Voila le code en C# de mon projet (AppelDllImport), j'ai volontairement fait au plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class ClassFacto
    {
       public ClassFacto(){}
       [DllImport("Facto.dll", EntryPoint="facto")]
       public static extern int facto(int x);
    }
     
    class TestDllImport
    {
       static void Main(string[] args)
       { Console.WriteLine(ClassFacto.facto(10).ToString());}
    }
    Voila l'erreur lors de la compilation (Je n'en ai pas lors de l'assemblage)
    Une exception non gérée du type 'System.EntryPointNotFoundException' s'est produite dans AppelDllImport.exe
    Informations supplémentaires : Impossible de trouver le point d'entrée facto dans la DLL Facto.dll.
    Ce message est en rapport avec un post précédent de slyer. (lien vers le post) Bien que mon problème et celui de slyer soit apparemment très proche, la cause est peut-être différente. J'ai préféré faire un nouveau post, c'eut été un peu malvenu d'exposer mon propre problème, alors qu'il attend lui aussi des réponses.
    Si quelqu'un a une piste....

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    ce n'est pas un problème avec l'emplacement de ta dll mais le nom de ta fonction :
    déclare ta fonction c++ comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    extern "C" __declspec(dllexport) int facto(int x){
       if(x>1){
          return facto(x-1)*x;
       }else{
          return 1;
       };
    };

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Par défaut
    Merci. En effet ca fonctionne maintenant.
    Pour ceux que ca pourrait interesser, il faut aussi placer la dll, dans le repertoire de windows, ou dans windows\system32, les 2 fonctionnent.
    (peut être d'autre répertoires system aussi, mais je n'ai pas tout testé )
    Merci encore.

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par pataphysicien
    Pour ceux que ca pourrait interesser, il faut aussi placer la dll, dans le repertoire de windows, ou dans windows\system32, les 2 fonctionnent.
    plus globalement :
    soit dans le répertoire de l'application
    soit dans un des répertoires listés dans la variable %Path% du système
    note : avec l'invite de commandes tapez ceci pour voir les dossiers

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. Réponses: 8
    Dernier message: 19/06/2006, 15h31
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo