В настоящее время я выполняю рефакторинг приложения в 64-разрядную версию и пытаюсь понять конкретное использование IntPtr. Код, который я пытаюсь понять, имеет вид:
IntPtr a = Marshal.AllocHGlobal(SomeObjectSize); //SomeObjectSize is calculated based on some standard
IntPtr b = IntPtr(a.ToInt32());
Теперь, на первый взгляд, я подумал, что могу просто изменить a.ToInt32()
на a.ToInt64()
, что сработало для случаев, когда int
необходимо для перехода в IntPtr
, но, поскольку a
и b
оба IntPtr
типов, я не могу просто использовать IntPtr b = a;
, поскольку IntPtr
является типом значения? Я полагаю, что это избавит меня от необходимости проверять наличие 64-битных или 32-битных сборок в подобной ситуации, и документы MSDN, похоже, не предполагают никакой магии в конструкторе IntPtr
.
В основном мой вопрос: зачем мне использовать
IntPtr a = Marshal.AllocHGlobal(SomeObjectSize);
IntPtr b = IntPtr(a.ToInt32());
над
IntPtr a = Marshal.AllocHGlobal(SomeObjectSize);
IntPtr b = a;