Как можно преобразовать объект UIntPtr в IntPtr в C #? - PullRequest
6 голосов
/ 21 сентября 2010

Мне нужно преобразовать UIntPtr объект в IntPtr в моем приложении на C # .NET 2.0. Как это можно сделать? Я не думаю, что это так просто:

UIntPtr _myUIntPtr = /* Some initializer value. */
object _myObject = (object)_myUIntPtr;
IntPtr _myIntPtr = (IntPtr)_myObject;

Ответы [ 3 ]

15 голосов
/ 21 сентября 2010

Это должно работать на x86 и x64

IntPtr intPtr = unchecked((IntPtr)(long)(ulong)uintPtr);
2 голосов
/ 21 сентября 2010

Это должно работать в 32-битных операционных системах:

IntPtr intPtr = (IntPtr)(int)(uint)uintPtr;

То есть, превратить UIntPtr в uint, превратить его в int, а затем превратить в IntPtr.

Скорее всего, джиттер оптимизирует все преобразования и просто превратит это в прямое присвоение одного значения другому, но я на самом деле не проверял это.

См. Ответ Джареда о решении, которое работает в 64-битных операционных системах.

0 голосов
/ 21 сентября 2010
UIntPtr _myUIntPtr = /* Some initializer value. */ 
void* ptr = _myUIntPtr.ToPointer();
IntPtr _myIntPtr = new IntPtr(ptr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...