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++/CLI Discussion :

utiliser un callback C++ natif avec du code .NET (en C#)


Sujet :

C++/CLI

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut utiliser un callback C++ natif avec du code .NET (en C#)
    Bonjour à tous, premier message et premier souci !

    Je dispose d'un périphérique et d'un code sommaire pour l'utiliser. Sans entrer dans des détails (confidentiel), voici les fichiers dont je dispose

    pour l'exemple, ce code sera nommé toto dans la suite de l'explication.

    J'ai trois fichiers : toto.h, toto.lib, toto.dll (dll native)

    toto.ha la tête suivante :

    #ifdef TOTO_EXPORTS
    #define TOTO_API __declspec(dllexport)
    #else
    #define TOTO_API __declspec(dllimport)
    #endif

    typedef struct _mastruct
    {
    WORD data1, data2, data3, data4;

    } mastruct;


    typedef void (WINAPI *TotoCallback) (const mastruct *, int, int);
    TOTO_API int RegistCallback(TotoCallback);


    Cette fonction me permet d'enregistrer un callback que je code, et qui a la tête suivante :

    void WINAPI monCallback(const mastruct *data, int i, int j)
    {
    //traitement des paramètres, fournis par le périphérique
    }


    Ce callback est automatiquement appelé lorsque le périphérique détecte une activité.
    J'arrive à faire fonctionner le tout avec un programme C++ WIN32, mais j'aimerais exploiter tout cela avec C#/.NET.

    J'ai donc 2 questions :

    Est-il possible d'enregistrer une méthode C# en tant que callback auprès de la fonction RegistCallback ? (j'en doute)

    Dans le cas probable où ce n'est pas possible, je vais donc devoir utiliser ma fonction monCallback(). J'aimerais que cette fonction lève un évènement (grosso-modo, implémente un délégué pour abonner des méthodes C#). Est-ce possible ?

    sinon, au pire, comment peut-on appeler une méthode C# depuis du code C++ natif ???

    Merci à ceux qui auront lu jusqu'ici !

  2. #2
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    Tu peux toujours envoyer un message à ton appli .net, en passant tes données dans le message si je dis pas de conneries.

    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void WINAPI monCallback(const mastruct *data, int i, int j)
    {
     
        //traitement des paramètres, fournis par le périphérique
        EnvoyerMessage(donnees)
     
    }
    Et dans ton code C#, tu implémente une réception de message.

    Tu envoie ton message en broadcast depuis ta dll.
    .: La cosse : il n'y a que ça de vrai :.

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    tu peux regarder dans ce post, c'est le meme principe : http://blog.developpez.com/nico-pyri...i_exe#more6460

    Grosso modo, le principe est d'utiliser GetFunctionPointerForDelegate et de lever un événement

  4. #4
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    Salut,

    Dans le cas d'une DLL C++ qui utilise les MFC (donc pas de C++/CLI à première vue ...) et qui fait appel a des librairies externes, m'est-il possible de gérer également la callback C++ depuis .net ?
    (j'utilise actuellement un wrapper sous vb.net)

    merci.
    .: La cosse : il n'y a que ça de vrai :.

Discussions similaires

  1. [XSLT] Utilisation d'un fichier XSL avec du code Java
    Par Baboulinet_ dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 20/04/2012, 17h04
  2. Réponses: 4
    Dernier message: 03/03/2010, 09h08
  3. Utilisation d'une lib C++ avec un code C.
    Par Letinono dans le forum Débuter
    Réponses: 1
    Dernier message: 30/11/2009, 16h16
  4. Réponses: 1
    Dernier message: 20/11/2008, 08h36
  5. Utilisation des ancres avec le code C#
    Par alband85 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 13/07/2007, 10h34

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