2010-11-25 6 views
6

J'ai dll COM que j'utilise en C++/Cli, l'un de la méthode dans ce COM dll retourne IntPtr Je veux convertir cela en arrière au pointeur d'objet natif. Comment je peux faire ça? s'il vous plaît à mettreComment faire pour convertir IntPtr en objet C++ natif

+0

Vous devez fournir les déclarations pour la méthode COM et "l'objet natif". – logicnp

Répondre

9

IntPtr est un type intégral, vous devez d'abord le convertir en un type de pointeur:

IntPtr somePtr; 
    ... 
    Mumble* fooPtr = (Mumble*)(void*)somePtr; 

Ou la version plus lisible:

Mumble* fooPtr = (Mumble*)somePtr.ToPointer(); 

L'appel de méthode sera optimisé loin à l'exécution.

7

IntPtr a une méthode ToPointer qui renvoie un void*. Appelez cette méthode, puis utilisez reintepret_cast pour convertir ce pointeur en type natif.

+0

Je pense qu'il devrait être bon d'utiliser un 'static_cast' dans ce cas. Je ne connais pas de bonne raison pour 'reintepret_cast 'un pointeur vide vers un autre type de pointeur. –

2

Je souhaite modifier Hans Passant's answer,
IntPtr retourne directement pointeur vide .. que vous pouvez lancer facilement dans tout type de natif C++ pointeur.

IntPtr somePtr; 
Mumble* fooPtr = (Mumble*)somePtr.ToPointer(); 

ici .ToPointer() retournera pointeur vide, vous pouvez jeter à votre type de pointeur personnalisé.

Questions connexes