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 :

Taille d'un pointeur de fonction (delegate)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut Taille d'un pointeur de fonction (delegate)
    Bonjour,

    j'ai défini une structure qui contient un pointeur de fonction (=delegate) et j'ai besoin de connaitre la taille de cette structure. Or lorsque je fais appel à Marshal.SizeOf(MyStructure), cela provoque une levée d'exception de type "NotSupportedException".

    En cherchant un peu, je me suis aperçu que cette exception venait de la présence d'un delegate au sein de ma structure, car si je le supprime, l'appel à Marshal.SizeOf(MyStructure) fonctionne trés bien.

    j'ai donc tenter d'isoler le probleme en ne m'occupant que du délégate, mais sans résultat. voici ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // déclaration d'un pointeur de fonction
    public delegate void MyDelegate();
     
    // Déclaration d'une variable de type MyDelegate
    // pointant sur une fonction sans implementation particulière
    MyDelegate myDel = delegate() {return;};
     
    // Test de la taille de l'objet myDel
    Int32 size = Marshal.SizeOf(myDel);
    --> cela provoque toujours une levée d exception de type System.NotSupportedException.
    J'ai regardé la documentation de cette fonction dans la MSDN, et cette exception ne fais pas parti des exceptions potentiellement levées par cette méthode.

    Je travail avec le CF3.5, cela peut-il venir de là ?

  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
    Bah je suppose qu'ils n'avaient pas prévu cette situation.
    Mais pourquoi as tu besoin de faire ça ? si c'est pour faire de l'interop, remplace ton delegate par un IntPtr et pour faire le lien utilise la méthode Marshal.GetFunctionPointerForDelegate qui permet d'obtenir un pointeur natif vers un delegate à partir d'un delegate managé.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut
    En effet, c'est bien pour faire de l'interop ...

    Ta solution m'a l'air intéressante, je vais y jeter un coup d'oeil !

    Merci

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

Discussions similaires

  1. [Débutant] Delegate et Pointeur de fonction
    Par alexcore dans le forum C#
    Réponses: 5
    Dernier message: 12/11/2012, 15h29
  2. Réponses: 5
    Dernier message: 03/10/2011, 16h20
  3. Matrice de pointeurs de fonctions
    Par sebduth dans le forum C
    Réponses: 15
    Dernier message: 18/07/2003, 14h03
  4. [Kylix] Pointeur de fonctions
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 03/07/2003, 10h17
  5. pointeur de fonction
    Par kardath dans le forum C
    Réponses: 4
    Dernier message: 28/12/2002, 14h39

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