2010-11-25 6 views
6

Tengo COM dll que estoy usando en C++/Cli, uno de los métodos en este COM dll devuelve IntPtr Quiero convertir eso de nuevo en el puntero del objeto nativo. Como puedo hacer eso ? favor de ponerCómo convertir IntPtr al objeto nativo de C++

+0

Debe proporcionar las declaraciones para el método COM y el "objeto nativo". – logicnp

Respuesta

9

IntPtr es un tipo integral, es necesario convertir primero a un tipo de puntero:

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

O la versión más legible:

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

se optimizará La llamada al método de distancia en tiempo de ejecución.

7

IntPtr tiene un método ToPointer que devuelve void*. Llame a este método, luego use reintepret_cast para convertir este puntero al tipo nativo correcto.

+0

Creo que debería estar bien usar un 'static_cast' en este caso. No conozco ninguna buena razón para 'reintepret_cast' un void-pointer a otro tipo de puntero. –

2

me gustaría modificar Hans Passant's answer,
IntPtr devuelve directamente vacío puntero .. que se puede lanzar fácilmente en cualquier tipo de C++ nativo puntero.

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

aquí .ToPointer() volverá puntero nulo, ahora se puede lanzar a su tipo de puntero personalizado.

Cuestiones relacionadas