找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 532|回复: 4

[求助]:vc6移植vc7.0 消息映射出现问题,何解?

[复制链接]
发表于 2005-9-9 15:10:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在VC6下写的程序移植到VC7下,在VC7下编译,对于从CACUIDIALOG派生出来的对话框对下一段代码总提示出错
BEGIN_MESSAGE_MAP(CCreatProjDlg, CAcUiDialog)
//{{AFX_MSG_MAP(CCreatProjDlg) Needed for modeless dialog.
ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

错误提示如下:e:\2004\RutManager\CreatProjDlg.cpp(24): error C2440: “static_cast” : 无法从“LONG (__thiscall CCreatProjDlg::* )(UINT,UINT)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
实际上就是指OnAcadKeepFocus函数的参数和返回值不匹配,
OnAcadKeepFocus函数声明和实现如下
afx_msg LONG OnAcadKeepFocus(UINT, UINT);
LONG CCreatProjDlg::OnAcadKeepFocus(UINT, UINT)
{
return TRUE;
}
上面的代码都是以前在VC6中用ARX工具自动生成的,
有点莫名其妙,不知大家是否碰到过这个问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-9-9 16:15:16 | 显示全部楼层
在VC++.NET中消息映射 ON_MESSAGE 对应的函数必须申明是LRESULT类型.

在相应的.h文件中修改申明:
将原声明
afx_msg LONG OnAcadKeepFocus(UINT,UINT);
改为
afx_msg LRESULT OnAcadKeepFocus(WPARAM wParam,LPARAM lParam);
而在相应的.cpp文件中修改相应函数:
LONG CCreatProjDlg::OnAcadKeepFocus(UINT, UINT)
{
  return TRUE;
}

LRESULT CCreatProjDlg::OnAcadKeepFocus(WPARAM wParam,LPARAM lParam)
{
  return TRUE;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-24 17:12:22 | 显示全部楼层
yindb是正解,顶一下,隔了一年看还是有用,多谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-25 11:04:40 | 显示全部楼层
2006的ARX帮助文档里就已经改过了,查一下就清楚
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-25 12:27:57 | 显示全部楼层
是会遇到这个问题的AutoDesk的文档里有这样一段话,看看就明白了。


The VC7 C++ compiler checks type casting much more strictly.
Most ON_MESSAGE() functions need updating to use their exact data types.

e.g.               
LONG CMyModeless::OnAcadKeepFocus(UINT, UINT)

changes to…

LRESULT CMyModeless::OnAcadKeepFocus(WPARAM, LPARAM)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-14 20:44 , Processed in 0.269311 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表