为什么GetProcessHeap在Windows 10上返回一个无意义的句柄?

时间:2018-01-10 21:25:13

标签: c#

我使用带有不安全代码的C#构建了一个应用程序,虽然它在Windows 7上工作正常但是当我尝试运行可执行文件时(将构建目录复制到另一台机器上:Windows 10)我从GetProcessHeap返回一个无意义的句柄(负数)。其余的应用程序工作正常,只是不安全的代码和手动内存管理导致一个问题,我怀疑从狡猾的句柄。

源代码:

        [DllImport("kernel32")]
        static extern int GetProcessHeap();
        static int Handle=0;

        public void test()
        {
            Null_Value = go.go_get_null_flag();
            Handle = GetProcessHeap();
            MessageBox.Show(Handle.ToString());
        }

代码目标x64是使用VS2013(Windows 7)和.NET 4.5构建的。

似乎没有任何帮助会受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您在64位系统上发生了什么,所以您的句柄将是64位,但您尝试将其存储到32位字段中。

将您的方法声明更改为:

[DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi, SetLastError = true)]
static extern IntPtr GetProcessHeap();

static IntPtr Handle=0;

然后调用它:

Handle = GetProcessHeap();