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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre exp�riment� 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
    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 : 51
    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
    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 exp�riment� 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
    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 exp�riment� 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
    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