C# 在Windows Server 2012和Net Framework 4.5.2上运行的P/Invokes突然生成>;32位指针

C# 在Windows Server 2012和Net Framework 4.5.2上运行的P/Invokes突然生成>;32位指针,c#,.net,pinvoke,C#,.net,Pinvoke,使用C#、Windows Server 2012 R2 x64和.NET framework 4.5.2 我正在开发一个旧的软件,它有一些错误的p/Invoke调用,在需要intptr的地方使用ints。这些调用已在系统中运行多年,在.NET3.5下运行时没有问题。当我们迁移到framework 4.5.2时,服务器2012上的一些调用开始失败。它们现在返回64位空间中的指针。例如,在Windows7上没有观察到类似的行为,Server2012上的Framework4.0也没有这样做 我已经修复

使用C#、Windows Server 2012 R2 x64和.NET framework 4.5.2

我正在开发一个旧的软件,它有一些错误的p/Invoke调用,在需要intptr的地方使用ints。这些调用已在系统中运行多年,在.NET3.5下运行时没有问题。当我们迁移到framework 4.5.2时,服务器2012上的一些调用开始失败。它们现在返回64位空间中的指针。例如,在Windows7上没有观察到类似的行为,Server2012上的Framework4.0也没有这样做

我已经修复了这些调用——当然是缺陷——但我无法解释为什么框架升级突然开始在一个操作系统上生成大于32位的指针,这让我很困扰。该行为是规则的和可复制的,包括服务器2012上的失败行为和其他地方的正常行为。我假设这与地址空间布局随机化(ASLR)有关,但自Server2008以来,它一直处于活动状态,没有任何地方表明它已被修改或启用。有人知道得更多吗?或者我应该把这一点写进事物随时间演变的方式中,而不去想它吗

注意这不是重复的-我知道为什么我的错误会发生,我们有不好的事情发生。我好奇的是什么
是底层框架中可能发生的变化,从而突然暴露出问题。

很难说,这取决于Windows内存管理器。我们在正在使用的另一个库中看到了完全相同的行为;尽管对地址使用了
int
,但在我们从3.5 SP1迁移到.NET Framework 4.5之前,它运行良好。这并不罕见,Win8.1 Update 3上启用的功能就是一个例子。了解Server 2012发生了什么的最好方法可能是访问serverfault.com。