很奇怪。我新建了一个DLL扩展,然后在里面新建了一个对话框,在.h里将其设置为AFX_EXT_CLASS,但是编译发现:
e:\vc6.0\dialog练习\dll_dlg\dlg1d.h(21) : error C2065: 'IDD_Dlg1' : undeclared identifier
e:\vc6.0\dialog练习\dll_dlg\dlg1d.h(21) : error C2057: expected constant expression怎么会这样呢,高手帮忙下。
怎么会找不到这个ID呢,郁闷啊~~~~明明有的,汗!!

解决方案 »

  1.   

    编译错误,看看resource.h包含正确不。
      

  2.   


    这个我试过了,放在stdafx.h里面,DLL编译能够通过,但是调用DLL的时候,还是同样报错的。怎么这样子啊,奇怪了,高手帮我解决下!
      

  3.   

    调用DLL的时候若报错,你要思考是否你的用法是否正确。
    你是如何使用Dll中资源的?
      

  4.   


    不会吧,我是网上看的,照着上面做的。
    过程如下;
    用DLL扩展,建立一个DLL,里面添加一个对话框,然后设置为导出AFX_EXT_CLASS,
    如果这样的话,编译会报错,在.h里说IDD=ID_DIALOG1没有定义ID_DIALOG1,汗一把,
    这个不是在Resource.H里定义了么,于是在.h里重新定义了下资源头文件的引用,编译,通过了。然后再建立一个对话框,采用静态链接的方式,#include"类头文件",#pragma comment "库文件"
    随便搞一个按钮事件,调用DLL里的对话框,编译报错,说没有找到ID_DIALOG1哎,继续找问题所在!
      

  5.   

    假设你在dll里面实现的导出类名为: CDlgDLL
    主要的问题就是, 你的exe在实例化CDlgDLL的时候
    在CDlgDLL::Create或DoModal的时候, 默认是查找exe的资源, 当然就查不到你的IDD_Dlg1
    导致创建失败, 发生意想不到的后果
    解决方法:
    1.在DLL导出一个全局函数, 如Create_CDlgDLL, 由它实例化CDlgDLL
    2.在exe中, 通过AfxSetResourceHandle 设置你的DLL handle后, 再实例化CDlgDLL
      

  6.   

    楼上的,但是我默认创建DLL扩展,然后加一个对话框,声明为AFX_EXT_CLASS,没有理由会编译通不过啊,还抱找不到对话框的ID标示符。
    有人帮我试下最好了,哈哈,就1分钟的时间哦!
      

  7.   


    大概应该就是这个原因。解决方法:有个AfxModuleState宏不知你用过没,你看例子代码里,输出函数开始和结束都要调一下那个的,抄过来就可以了
      

  8.   

    楼上几位都误会了,他这是还没开始调用就出现的编译问题
    哪个地方报错找不到资源,就再那个头文件加个
    #include "resource.h"
    不就完了呗
      

  9.   


    如果没有包含特定资源,发现无效的ID,编译当然不能通过,在MFC工程都是一样的。
    代码都不对,怎么可能自动加载?