对象:MFC下非常好用的开源界面Ultimate Grid 7.3
问题:1 用Vc++2015编译Ultimate Grid 7.3为X64 DLL;2 编译成32位时一切都没问题,但编译成X64位后,OnCellTypeNotify收不到消息。(通过其中的Demos下EdittingDemo做的实验)。
发现问题:
1. OnCellTypeNotify的定义,在ugceltyp.h文件中:
virtual int OnCellTypeNotify(long ID,int col,long row,long msg,LONG_PTR param);
2. 而在继承类中MyCUG定义:
virtual int OnCellTypeNotify(long ID,int col,long row,long msg, long param);
3. 系统在调用virtual函数时,因为定义的不同,没有调用到这个继承类的函数。
解决问题:将MyCUG中的定义改成与ugceltyp.h文件定义一致即可
分析:
1. 在编译成32时,以上不同的定义没问题;但编译成64位系统以上定义就不成功,晕;
2. 我的分析原因,32位程序编译时,LONG占用4个字节;同时LONG_PTR也占用4个字节,定义一致;而在R64程序编译时,LONG_PTR可能占用8个字节,定义不同了。(这个原因,只是我个人瞎分析。看大家分析下是什么原因)。