MAPI работает на одной системе x64, но не на другой - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу отправлять электронные письма через MAPI.На одном Windows Server 2008 R2 x64 все работает нормально.Я попробовал один и тот же код на Windows Server 2012 R2 x64 там, я всегда получаю следующее исключение:

System.OverflowException: арифметическая операция привела к переполнению.at System.IntPtr.op_Explicit (IntPtr value)

Код выглядит следующим образом:

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 * size);

- это место, где происходит ошибка.

size = 40 и m_recipients.Count = 1.

Почему он работает в одной системе, а не в другой?

1 Ответ

0 голосов
/ 21 ноября 2018

После некоторой дополнительной отладки я увидел, что Ханс Пассант был прав.Строка, которая была проблемой, была:

int ptr = (int) intPtr;

Мне пришлось изменить на long, и это сработало

long ptr = (long) intPtr;

...