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

VC++ .NET Discussion :

Utilisation correcte de StructureToPtr


Sujet :

VC++ .NET

  1. #1
    Membre chevronn� Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par d�faut Utilisation correcte de StructureToPtr
    Bonjour,

    (Visual Studio 2005)

    J'ai une classe d�clar�e :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    public ref class MyClass{ ... }
    Je voudrais r�cup�rer un pointeur void * d'une instance de cette classe. J'ai donc proc�d� ainsi :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // je crée un IntPtr alloué avec la taille de l'objet dont je veux récupérer un pointeur
    int rawsize =  sizeof( this );
    IntPtr objectAddress = System::Runtime::InteropServices::Marshal::AllocHGlobal( rawsize ); 
     
    // je convertis mon objet en IntPtr
    System::Runtime::InteropServices::Marshal::StructureToPtr(this, (IntPtr)objectAddress, true);  
     
    // et hop j'ai mon pointeur
    void * ptr = (void *)objectAddress;
    Mais � l'�x�cution du StructureToPtr j'obtiens :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Additional information: La structure spécifiée doit être blittable ou avoir des informations de disposition.
    De ce que j'ai compris, les variables blittable sont de type simple (bool, int, etc).

    Et effectivement ma classe contient des objets de classe plus complexe. Donc elle n'est pas blittable ? Je fais comment alors ?

    De plus pourquoi doit-on allouer de la m�moire pour r�cup�rer un pointeur sur un objet qui est d�j� allou� ?

    Merci.

    Flo.

  2. #2
    Membre chevronn� Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par d�faut
    Je r�ponds � ma propre question (il faut en fait passer par GCHandle) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
           MyClass ^ myObj = gcnew MyClass();
           GCHandle gcHandle = GCHandle::Alloc(myObj );
           void * objectAddress = (void *)GCHandle::ToIntPtr(gcHandle);
    Et son correspondant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    	// void * objectAddress;
    	GCHandle gcHandle = GCHandle::FromIntPtr((IntPtr)objectAddress);
    	MyClass ^ myObj = (MyClass ^)gcHandle.Target;
    Merci. A+

    Flo.

  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
    Par d�faut
    tu peux aussi utiliser les classes de marshal, comme Marshal.AllocHGlobal

    voir http://blog.developpez.com/index.php...&c=1&tb=1&pb=1

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 8
    Dernier message: 16/08/2007, 11h40
  2. [GRASP] Est-ce que j'utilise correctement les design pattern?
    Par Tourix dans le forum Design Patterns
    R�ponses: 7
    Dernier message: 21/06/2006, 18h27
  3. comment utiliser correctement les sessions?
    Par cladsam dans le forum Langage
    R�ponses: 5
    Dernier message: 06/02/2006, 11h56
  4. [C#] Comment utiliser correctement Stream.Read ?
    Par ArChAnGe76 dans le forum Windows Forms
    R�ponses: 6
    Dernier message: 20/12/2005, 20h48
  5. Comment utiliser correctement le debugger de DevCPP
    Par Le Furet dans le forum Dev-C++
    R�ponses: 2
    Dernier message: 29/09/2005, 09h56

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