Как преобразовать 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, теперь вы можете использовать свой пользовательский тип указателя.