这只发生在 64 位,但代码工作 32 位操作系统
我有两行代码,我可以从指针获取第一个结构,但我的应用程序在第二行崩溃。
我尝试更改变量类型(uint 到 Int64)我找不到任何解决方案。
GetChangesBuffer getChangesBuffer = (GetChangesBuffer)Marshal.PtrToStructure(_getChangesBuffer, typeof(GetChangesBuffer));
ChangesBuffer buffer = (ChangesBuffer)Marshal.PtrToStructure(getChangesBuffer.Buffer, typeof(ChangesBuffer)); // App crashing in this point
事件日志中的第一个错误(应用程序错误)
错误应用程序名称:ApplicationName.exe,版本:1.0.0.0,时间戳:0x50b214c2 错误模块名称:clr.dll,版本:4.0.30319.269,时间戳:0x4ee9d6e1 异常代码:0xc0000005 错误偏移量:0x00000000000d2ad3 错误进程 id:0xb3c 错误应用程序启动时间:0x01cdcb0bf90a0678 错误应用程序路径:C:\XXXXXXXXX.exe 错误模块路径:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 报告 ID:3857cdd8-36ff-11e2-ad19-00e04d3a73da
事件日志中的第二个错误(.Net 运行时)
应用程序:ApplicationName.exe 框架版本:v4.0.30319 描述:由于 IP 000007FEFAD22AD3 (000007FEFAC50000) 处的 .NET 运行时出现内部错误,退出代码为 80131506,进程已终止。
使用的结构
[StructLayout(LayoutKind.Sequential)]
public struct GetChangesBuffer
{
public IntPtr Buffer;
public IntPtr UserBuffer;
}
[StructLayout(LayoutKind.Sequential)]
public struct ChangesBuffer
{
public uint counter;
public const int MAXCHANGES_BUF = 20000;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAXCHANGES_BUF)]
public ChangesRecord[] pointrect;
}
[StructLayout(LayoutKind.Sequential)]
public struct ChangesRecord
{
public uint type;
public RECT rect;
public RECT origrect;
public Point point;
public uint color;
public uint refcolor;
}
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}