Как конвертировать IntPtr в нативный объект c ++ - PullRequest
6 голосов
/ 25 ноября 2010

У меня есть COM dll, который я использую в C ++ / Cli, один из методов в этой dll COM возвращает IntPtr, который я хочу преобразовать обратно в собственный указатель объекта.Как я могу это сделать?пожалуйста, положите

Ответы [ 3 ]

12 голосов
/ 25 ноября 2010

IntPtr является целочисленным типом, сначала необходимо преобразовать его в тип указателя:

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

Или более читаемая версия:

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

Вызов метода будет оптимизирован во время выполнения.

8 голосов
/ 25 ноября 2010

IntPtr имеет метод ToPointer, который возвращает void*. Вызовите этот метод, затем используйте reintepret_cast для приведения этого указателя к нужному нативному типу.

2 голосов
/ 21 мая 2014

Я бы хотел изменить Ответ Ханса Пассанта ,
IntPtr напрямую возвращает пустой указатель ... который вы можете легко привести в любой тип родного указателя C ++.

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

здесь .ToPointer() вернет пустой указатель, теперь вы можете привести к вашему типу указателя.

...