我想通过MAPI发送电子邮件。在一个Windows Server 2008 R2 x64上,它可以正常工作。我在Windows Server 2012 R2 x64上尝试了相同的代码,但总是收到以下异常:
System.OverflowException:算术运算导致溢出。 在System.IntPtr.op_Explicit(IntPtr值)
代码如下:
IntPtr GetRecipients(out int recipCount)
{
recipCount = 0;
if (m_recipients.Count == 0)
return IntPtr.Zero;
int size = Marshal.SizeOf(typeof(MapiRecipDesc));
IntPtr intPtr = Marshal.AllocHGlobal(m_recipients.Count * size);
int ptr = (int)intPtr;
foreach (MapiRecipDesc mapiDesc in m_recipients)
{
Marshal.StructureToPtr(mapiDesc, (IntPtr)ptr, false);
ptr += size;
}
recipCount = m_recipients.Count;
return intPtr;
}
此行:
IntPtr intPtr = Marshal.AllocHGlobal(m_recipients.Count *大小);
是发生错误的地方。
大小= 40,m_recipients.Count = 1。
为什么它只能在一个系统上运行而不能在另一个系统上运行?
答案 0 :(得分:1)
经过一些额外的调试后,我发现Hans Passant是正确的。问题所在的行是:
int ptr =(int)intPtr;
我不得不更改为long
,并且有效
long ptr =(long)intPtr;