c# - MAPI 适用于一个 x64 系统,但不适用于另一个
问题描述
我想通过 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 * size);
是发生错误的地方。
大小 = 40 和 m_recipients.Count = 1。
为什么它可以在一个系统上运行,而不能在另一个系统上运行?
解决方案
经过一些额外的调试后,我发现 Hans Passant 是对的。问题所在的行是:
int ptr = (int)intptr;
我不得不改变long
它并且它有效
长指针 = (long)intPtr;
推荐阅读
- react-native - 无法从 React Native 中的另一个类调用方法
- python - 插入数据时如何修复“peewee.InternalError:(1364,“字段'id'没有默认值”)”
- c# - 我可以自动计算传递到多行文本框的浮点值吗
- bootstrap-4 - 选择字段中的crispy-forms 错误消息
- python - 双向 RNN 单元未添加 Tensorflow
- c++ - 一个接受字符串和整数的可变参数函数,格式化后者并连接所有?
- java - Wildfly (12/14) Elytron - LDAP 安全性 - 缺少依赖项
- sql - 多行 cast + 除法公式不起作用
- javascript - 如何获取第一个值然后获取另一个订阅方法
- reactjs - 在 React 中呈现可选组件列表