vsto插件在64位Office的一个异常---算术运算溢出(IntPtr转int)
来源:互联网 发布:西安行知小学 编辑:程序博客网 时间:2024/06/04 20:11
在vsto插件开发中,以前从没发现过这个问题,到了Office2013(64bit) ,历经艰辛跟踪到了这句:
SendMessage(this.Handle, WM_ALLOW_LOGIN, -1, (int)ptr);
其中ptr为IntPtr类型,SendMessage为API,声明如下:
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
跟踪到的异常信息为“算术运算导致溢出。”致使插件关键功能无法使用!查了下原因:
http://www.cnblogs.com/shouzheng/archive/2012/04/13/2445819.html 这篇文章给出了问题产生的原因,但个人觉得并非全部。
是,该问题可以得到解决,我的解决方案是把API原型改为
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, long lParam);
调用时:
SendMessage(this.Handle, WM_ALLOW_LOGIN, -1, (long)ptr);
而且换成long之后,无论在32位还是64位都可以得到成功运行。
但是我想知道的是:在没换成long之前,也就是int,为何在64位系统+64位Office2010环境下确不会出现异常!!以至于插件用这么久都不曾出现过该问题
这个又作何解释呢??
PS: 若把API原型参数wParam改为long类型,调用时并无抛出异常,但程序被迫自动退出!
- vsto插件在64位Office的一个异常---算术运算溢出(IntPtr转int)
- javascript算术运算溢出
- Office VSTO插件开发问题集
- office vsto Add-In 插件 ClickOnce打包
- 算术逻辑位运算
- .NET算术运算溢出问题
- .NET算术运算溢出问题
- Oracle C#的"算术运算导致溢出"错误
- Java位算术运算符
- VSTO开发中应避免有相同的项目名在同一个Office应用中
- 一个隐形的java int溢出
- 一个int溢出的小问题
- Swift中的"可溢出"算术运算符
- J2ME支持的数组最大长度是多少?创建一个164025大的int型数组报内存溢出异常!
- 一个位运算的问题
- 算术型数据的溢出
- 指针的算术运算
- 指针的算术运算
- Lua之变量环境
- 11gR2 RAC: Why SCAN & Node Listeners in 11gRAC
- Java读取文件方法大全
- Nexus1.9建立私服自己使用
- 华为第1书:《华为交换机学习指南》全面预售中
- vsto插件在64位Office的一个异常---算术运算溢出(IntPtr转int)
- How to declare a null pointer
- 在UINavigationController下只要一个页面支持转屏
- oracle-0乱七八糟
- 二叉排序树的创建查找与删除
- 《REWORK》启示录 发出你的心声——程序员与身体
- Erlang接触的感受
- jQuery.i18n.properties实现js国际化
- 模拟登陆第一步:教你如何用wireshare抓取学校学籍管理系统登陆信息