“System.ExecutionEngineException”类型的未经处理的异常在 mscorlib.dll 中发生

时间:2023-01-29 20:34:14
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LOCALGROUP_MEMBERS_INFO_1
{
      public int lgrmi1_sid;
      public int lgrmi1_sidusage;
      public string lgrmi1_name;
}

LOCALGROUP_MEMBERS_INFO_1 lgi = new LOCALGROUP_MEMBERS_INFO_1();
//执行下面这句出现异常,
lgi = (LOCALGROUP_MEMBERS_INFO_1)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_MEMBERS_INFO_1));

运行环境.Net FrameWork 4.0,在win7 32位,winodws 2003 64位上可以,在windows 2008 64位上异常?求解

3 个解决方案

#1


这个错误的原因,C++定义的结构体在转C#结构体时,属性类型没对应正确,导致两个结构体的大小有差异,再调用PtrToStructure方法时导致内存错误。

#2


winodws 2003有64位系统?
怎么我印象中2003都是32位呢
2003比win7还要早,那时候就有64位系统了?

我猜测还是32位系统和64位系统的问题
你可以先不纠结2008
找台win7 64位先测试

#3


或者把int全部改为Int32再试

int在32位系统下等同于Int32
但是在64位系统下就变成了Int64

很可能是这一点造成了你的结构体和dll里的结构体类型不匹配

#1


这个错误的原因,C++定义的结构体在转C#结构体时,属性类型没对应正确,导致两个结构体的大小有差异,再调用PtrToStructure方法时导致内存错误。

#2


winodws 2003有64位系统?
怎么我印象中2003都是32位呢
2003比win7还要早,那时候就有64位系统了?

我猜测还是32位系统和64位系统的问题
你可以先不纠结2008
找台win7 64位先测试

#3


或者把int全部改为Int32再试

int在32位系统下等同于Int32
但是在64位系统下就变成了Int64

很可能是这一点造成了你的结构体和dll里的结构体类型不匹配