Как преобразовать IntPtr в собственный объект c++

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

3 ответов


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

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

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

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

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


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


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

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

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