我想通过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。

为什么它只能在一个系统上运行而不能在另一个系统上运行?

最佳答案

经过一些额外的调试后,我发现Hans Passant是正确的。问题所在的行是:


  int ptr =(int)intPtr;


我不得不更改为long,并且有效


  long ptr =(long)intPtr;

关于c# - MAPI可在一个x64系统上运行,但不能在另一个x64系统上运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53378217/

10-13 08:03