wkq清秋枫叶
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2008-08-07
  • 粉丝1
  • 关注0
  • 积分53分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1929回复:2

求教:MFC扩展动态链接库的编译错误

楼主#
更多 发布于:2004-09-28 10:34
在下在看马安鹏编著的《Visual C++6程序设计导学》,按10.2.3的实例4上机,该例中,先用“MFC APPWizard(dll)”模板生成extdll项目,编译成功,并创建extdll.dll,extdll.lib文件,然后再生成测试项目testdll.编译、连接出现如下错误:
testdllView.cpp
c:\myprojects\extdll\testdll\caldlg.h(22) : error C2065: 'IDD_DIALOG1' : undeclared identifier
c:\myprojects\extdll\testdll\caldlg.h(22) : error C2057: expected constant expression
上述信息中,CalDlg.h为extdll中一对话框CCalDlg类的声明文件,出错误之处为:
enum { IDD = IDD_DIALOG1 };
在对extdll单独编译时,没有问题,而与testdll项目联编时出现问题,这是为什么?请高手赐教!


snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-28 13:33
在下在看马安鹏编著的《Visual C++6程序设计导学》,按10.2.3的实例4上机,该例中,先用“MFC APPWizard(dll)”模板生成extdll项目,编译成功,并创建extdll.dll,extdll.lib文件,然后再生成测试项目testdll.编译、连接出现如下错误:
testdllView.cpp
c:myprojectsextdlltestdllcaldlg.h(22) : error C2065: 'IDD_DIALOG1' : undeclared identifier
c:myprojectsextdlltestdllcaldlg.h(22) : error C2057: expected constant expression
上述信息中,CalDlg.h为extdll中一对话框CCalDlg类的声明文件,出错误之处为:
enum { IDD = IDD_DIALOG1 };
在对extdll单独编译时,没有问题,而与testdll项目联编时出现问题,这是为什么?请高手赐教!


 


如果单独对测试项目testdll.编译、连接
出现c:\\myprojects\\extdll\\testdll\\caldlg.h(22) : error

你是把dll中类的头文件直接拷贝过来了吧,
IDD_DIALOG1 应该在extdll工程中的resource.h中定义
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
wkq清秋枫叶
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2008-08-07
  • 粉丝1
  • 关注0
  • 积分53分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-28 21:48
“IDD_DIALOG1 应该在extdll工程中的resource.h中定义”,实际上,IDD_DIALOG1 是在extdll工程中的resource.h中定义的。不过,snowStart先生的回答给了我启发,问题正出在这里。由于每个project都有自己的resource.h,caldlg.h中的#include “resource.h”语句可能引起编译器的歧义,我索性在caldlg.h中去掉#include “resource.h”语句,而直接用#define语句(将resource.h中的5各有关的#define语句全copy过来),然后一切正常。
    感谢snowStart先生的回答,并附送上本问题的积分。
游客

返回顶部