Я хочу отправлять электронные письма через 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.
Почему он работает в одной системе, а не в другой?