我使用带有不安全代码的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构建的。
似乎没有任何帮助会受到高度赞赏。
答案 0 :(得分:1)
您在64位系统上发生了什么,所以您的句柄将是64位,但您尝试将其存储到32位字段中。
将您的方法声明更改为:
[DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi, SetLastError = true)]
static extern IntPtr GetProcessHeap();
static IntPtr Handle=0;
然后调用它:
Handle = GetProcessHeap();