我用的是规范的MFC动态DLL,DLL本身编译没问题
DLL中代码:
class CDhk : public CDialog
{
// Construction
public:
CDhk(CWnd* pParent = NULL);   // standard constructor// Dialog Data
//{{AFX_DATA(CDhk)
enum { IDD = IDD_DHK_DIALOG };    //这个资源无法找到...
};add.h
#include "dhk.h"
class AFX_EXT_CLASS CAdd  
{
public:
void add();
CAdd();
~CAdd();
};add.cpp
void CAdd::add()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDhk dhk;
dhk.DoModal();
}将dll,lib和add.h复制到exe测试文件目录中
exe文件中什么都没写,只是在菜单project->setings...添加了lib库,在对话框的头文件中
#include "add.h"
class CDlltestDlg : public CDialog
编译就显示d:\work\vc\dlltest\dhk.h(21) : error C2065: 'IDD_DHK_DIALOG' : undeclared identifier
请问这是为什么?我是不是少了哪步没做?

解决方案 »

  1.   

    #include "resourc.h"
    或者把IDD_DHK_DIALOG在头文件中定义
      

  2.   

    未包含资源文件到工程?其实利用dll里的对话框最好是新建对话框类时的文件名跟所在的应用程序类名一样,再用钩子的方式拦截键盘事件,接下某个键时弹出对话框。http://www.cppblog.com/niewenlong/archive/2008/10/18/28446.html
      

  3.   

    ys0004 ,#include "resourc.h"是在exe中包含,还是在DLL中包含?exe中已经有个resourc.h,会不会冲突?
    IDD_DHK_DIALOG在dll中还是在exe中的头文件定义?能否写详细点?
      

  4.   


    建议直接把DLL中的Resourc.h中的IDD_DHK_DIALOG的定义在你的EXE中#define下就可以了。
      

  5.   

    sys,用了你的方法编译是通过了,可是运行的时候一到创建窗口的代码,就会弹出个“终止、重试、忽略”的对话框
    在DLL包含对话框还真难哦
      

  6.   

    我改成MFC扩展DLL暂时解决了这个问题,不知道以后还会不会出错
    先谢谢各位,结贴了