c# - 为什么使用 IntPtr 作为句柄?

标签 c# .net winapi c++-cli window-handles

在使用 PInvoke 时,我注意到我们需要使用 IntPtr 来引用 Windows 句柄。我想知道为什么不直接使用 int 作为句柄?我对句柄的理解是它只是一个整数值。

最佳答案

Windows 句柄被定义为本地机器指针大小的整数。这样一来,如果需要,他们就可以 secret 地成为指导者。 (句柄可能不是指针,但如果操作系统实现者认为有必要,它是允许的。出于安全原因,它们通常不是指针;它如果他们实际上是指针,那么人们很容易滥用该系统。)

C# 中定义为 32 位整数的 int,在 64 位机器上太小了。 IntPtr 被定义为一个整数,可以容纳机器大小的指针。这就是为什么在与句柄进行互操作时总是使用 IntPtr 的原因。

关于c# - 为什么使用 IntPtr 作为句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9169370/

相关文章:

C# Entity Framework SaveChanges() 不工作

c# - 使用 C# 创建计划任务(任务计划程序托管包装器)

c++ - PropertySheet 在 Win32 中的应用与使用

c# - 全屏显示窗口

c# - 检查某个位置是否出现多个子字符串的最快方法

c# - 我如何替换 Web API 模型绑定(bind)的行为,以便在没有传入参数时收到一个新实例而不是 Null

javascript - Webbrowser 控件如何更改窗口 javascript 属性?

c# - 赛事管理应用——如何管理选手和队伍?

c# - 根据定义,值类型是不可变的吗?

python - Windows 中的多显示器设置的每个屏幕都有不同的墙纸