Добавление intPtr к int приводит к ошибке в .net Framework 3.5 - PullRequest
3 голосов
/ 29 июня 2011

у меня есть этот код:

lvItem.pszText = (IntPtr)(lpRemoteBuffer + Marshal.SizeOf(typeof(LV_ITEM)));

отлично работает на 4.0.

, если я понижаю проект до 3.5, это дает мне эту ошибку:

Operator '+' cannot be applied to operands of type 'System.IntPtr' and 'int'

любая идея, как это исправить, чтобы она работала на 3.5

и я не знаю, почему он работает в 4.0?

заранее спасибо

Ответы [ 2 ]

7 голосов
/ 29 июня 2011

Да - если вы посмотрите на документацию для свойства Addition , вы увидите, что оператор был введен только в .NET 4. Кстати, вам не нужно приводить.

В .NET 3.5 вы, вероятно, могли бы использовать:

lvItem.pszText = new IntPtr(lpRemoteBuffer.ToInt64() +
                            Marshal.SizeOf(typeof(LV_ITEM)));

Конечно, тогда вам нужно надеяться, что вы не в 32-битной системе с указателем, который выходит за пределы int.MaxValue:)

0 голосов
/ 29 июня 2011

IntPtr не поддерживал арифметику указателей до .NET 4.0.Если вы хотите так работать с указателями, вы должны использовать реальные указатели вместо IntPtr.

...