阅读:2018回复:2
求教:MFC扩展动态链接库的编译错误
在下在看马安鹏编著的《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项目联编时出现问题,这是为什么?请高手赐教! |
|
沙发#
发布于:2004-09-28 13:33
在下在看马安鹏编著的《Visual C++6程序设计导学》,按10.2.3的实例4上机,该例中,先用“MFC APPWizard(dll)”模板生成extdll项目,编译成功,并创建extdll.dll,extdll.lib文件,然后再生成测试项目testdll.编译、连接出现如下错误: 如果单独对测试项目testdll.编译、连接 出现c:\\myprojects\\extdll\\testdll\\caldlg.h(22) : error 你是把dll中类的头文件直接拷贝过来了吧, IDD_DIALOG1 应该在extdll工程中的resource.h中定义 |
|
|
板凳#
发布于: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先生的回答,并附送上本问题的积分。 |
|