将 intPtr 添加到 int 在 .net Framework 3.5 上生成错误

发布于 2024-11-17 20:51:42 字数 344 浏览 2 评论 0原文

我有这个代码:

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 上工作?

提前致谢

i have this code:

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

it works fine on 4.0.

if i downgrade the project to 3.5 it gives me this error :

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

any idea how do i fix that to make it work on 3.5

and i dont know why it works in 4.0 ?

thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

絕版丫頭 2024-11-24 20:51:42

是的 - 如果您查看Addition 属性的文档 您将看到该运算符仅在 .NET 4 中引入。顺便说一句,您不应该需要强制转换。

在 .NET 3.5 上,您可能会使用:

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

当然,您需要希望您不在 32 位系统上使用指针超过 int.MaxValue :)

Yup - if you look at the documentation for the Addition property you'll see that operator was only introduced in .NET 4. You shouldn't need the cast, by the way.

On .NET 3.5 you could probably use:

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

Of course you then need to hope you're not on a 32-bit system with a pointer which goes over int.MaxValue :)

单调的奢华 2024-11-24 20:51:42

IntPtr 在 .NET 4.0 之前不支持指针算术。如果您想以这种方式使用指针,则必须使用真正的指针来代替 IntPtr。

IntPtr didn't support pointer arithmetic prior to .NET 4.0. If you want to work that way with pointers, you have to use real pointers insteat of IntPtr.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文