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.