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 :

[P/Invoke/Delegates] Finesse d'un wrapper P/Invoke


Sujet :

C++/CLI

  1. #1
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut [P/Invoke/Delegates] Finesse d'un wrapper P/Invoke
    Bien le bonjour à toi, peuple du forum dotNET (qui ne doit plus me voir bien souvent ces derniers temps).

    Comme vous pourrez le voir si vous avez la curiosité de cliquer sur ma signature, je suis en ce moment en train d'écrire un wrapper pour la librairie Irrlicht se servant uniquement des P/Invoke (pour des raisons d'aspect multi-plateforme principalement).

    Pour planter le schéma, voilà comment c'est fait :
    -Un wrapper en C/C++ réécrit toutes les fonctions de la librairie de base sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SceneNode_Fonction(void *ptr, ...arguments...)
    {
        ((SceneNode)ptr)->fonction(arguments);
    }
    -Un wrapper en C# appelle tout ça en P/Invoke et patati et patata.

    Ensuite pour la communication code natif => code managé, j'ai utilisé des delegates en C# et des callbacks en C... Rien de bien sorcier.

    Aujourd'hui je me heurte à un problème de méthode néanmoins :
    J'ai dans le code natif des interfaces dont quelqu'un qui utilise la librairie peut hériter (par exemple pour créer ses propres "SceneNodes") et j'aurais besoin de les recopier en C#.
    Il faut savoir que ces interfaces possèdent des dizaines de fonctions virtuelles que l'utilisateur peut réécrire (ou non).
    Pour faire ça, avant je faisais des callbacks en C... Ca marchait mais comme là j'ai des dizaines de fonctions ça ferait légèrement lourd... De plus se pose un problème dès lors que le code natif comme le code managé peuvent avoir besoin d'accéder à ces fonctions virtuelles (ce n'est pas vraiment un problème mais là encore, ça exige plus de "sale" code).

    Je ne pense pas qu'il y ait une méthode "miracle" mais il y aurait-il une "construction" ou une "architecture" qui pourrait me permettre de rendre le tout moins lourd ?

    Merci d'avance,
    DeusXL

    PS : Le sujet est vraiment très ciblé et très précis mais pas très simple à expliquer. Veuillez d'avance m'excuser si ce n'est pas très clair, je tâcherais d'expliquer ce qui est nécessaire.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour mieux comprendre ton problème, quand tu dis

    se servant uniquement des P/Invoke (pour des raisons d'aspect multi-plateforme principalement).
    Est-ce que ça signifie que tu ne souhaites pas utiliser le C++/CLI ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Citation Envoyé par JolyLoic
    Pour mieux comprendre ton problème, quand tu dis



    Est-ce que ça signifie que tu ne souhaites pas utiliser le C++/CLI ?
    C'est exactement ça, je ne peux pas vraiment utiliser le C++/CLI dans le sens que mon projet est développé sous Mono et que celui-ci n'admet pas le code natif (ni la compilation du C++/CLI d'ailleurs).
    Ca peut peut-être paraître étrange un si gros projet porté avec des P/Invoke mais au final ça marche plutôt bien, et c'est multi-plateforme... Que demande le peuple

  4. #4
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Pour clore le sujet je tenais à dire que si je n'ai pas trouvé de remède miracle (à mon avis il n'y en a pas vraiment), j'ai réussi à me faire une petite architecture qui m'a simplifié la tâche (concrètement, une fonction mère qui exécute des fonctions plus petites) mais uniquement adapté à mon problème précis donc pas très utile à expliquer ici.

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

Discussions similaires

  1. Invoke et delegate
    Par Mani01 dans le forum VB.NET
    Réponses: 3
    Dernier message: 01/02/2015, 11h48
  2. Invoke Delegate - plus souple
    Par megamario dans le forum VB.NET
    Réponses: 8
    Dernier message: 20/02/2013, 21h04
  3. Conversion Invoke Delegate C# en VB.net
    Par megamario dans le forum Visual Studio
    Réponses: 0
    Dernier message: 08/04/2010, 10h47
  4. [C#][Thread][Invoke] petit problème de delegate
    Par clinic dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 22/06/2007, 11h38
  5. [Com] Interface IDispatch.Invoke
    Par Laurent Dardenne dans le forum Windows
    Réponses: 4
    Dernier message: 15/06/2004, 22h51

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