dll里为什么不能加载资源

羽毛乱发 远方 项目经理  2010-04-28 04:25:21
很奇怪。

我新建了一个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呢,郁闷啊~~~~明明有的,汗!!
...全文
198 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
羽毛乱发 2010-05-04
[Quote=引用 14 楼 shengliz 的回复:]

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

顶上!嘿嘿
回复
羽毛乱发 2010-04-30
[Quote=引用 16 楼 acaiacc 的回复:]
楼上几位都误会了,他这是还没开始调用就出现的编译问题


哪个地方报错找不到资源,就再那个头文件加个
#include "resource.h"
不就完了呗
[/Quote]

呵呵,这个我知道,我也加了,也顺利通过编译了。

但是按理来说,资源应该是自动加载进去的,怎么会编译出错呢~~~有点纳闷的
回复
Fireway2008 2010-04-30
[Quote=引用 17 楼 shengliz 的回复:]

呵呵,这个我知道,我也加了,也顺利通过编译了。

但是按理来说,资源应该是自动加载进去的,怎么会编译出错呢~~~有点纳闷的
[/Quote]

如果没有包含特定资源,发现无效的ID,编译当然不能通过,在MFC工程都是一样的。
代码都不对,怎么可能自动加载?
回复
acaiacc 2010-04-29
楼上几位都误会了,他这是还没开始调用就出现的编译问题


哪个地方报错找不到资源,就再那个头文件加个
#include "resource.h"
不就完了呗
回复
halleyzhang3 2010-04-29
[Quote=引用 13 楼 qifa 的回复:]
假设你在dll里面实现的导出类名为: CDlgDLL
主要的问题就是, 你的exe在实例化CDlgDLL的时候
在CDlgDLL::Create或DoModal的时候, 默认是查找exe的资源, 当然就查不到你的IDD_Dlg1
导致创建失败, 发生意想不到的后果
解决方法:
1.在DLL导出一个全局函数, 如Create_CDlgDLL, 由它实例化CDlgDLL
2.在exe中, ……
[/Quote]

大概应该就是这个原因。解决方法:有个AfxModuleState宏不知你用过没,你看例子代码里,输出函数开始和结束都要调一下那个的,抄过来就可以了
回复
羽毛乱发 2010-04-29
楼上的,但是我默认创建DLL扩展,然后加一个对话框,声明为AFX_EXT_CLASS,没有理由会编译通不过啊,还抱找不到对话框的ID标示符。
有人帮我试下最好了,哈哈,就1分钟的时间哦!
回复
qifa 2010-04-28
假设你在dll里面实现的导出类名为: CDlgDLL
主要的问题就是, 你的exe在实例化CDlgDLL的时候
在CDlgDLL::Create或DoModal的时候, 默认是查找exe的资源, 当然就查不到你的IDD_Dlg1
导致创建失败, 发生意想不到的后果
解决方法:
1.在DLL导出一个全局函数, 如Create_CDlgDLL, 由它实例化CDlgDLL
2.在exe中, 通过AfxSetResourceHandle 设置你的DLL handle后, 再实例化CDlgDLL
回复
羽毛乱发 2010-04-28
[Quote=引用 11 楼 xyzhaopeng 的回复:]
调用DLL的时候若报错,你要思考是否你的用法是否正确。
你是如何使用Dll中资源的?
[/Quote]

不会吧,我是网上看的,照着上面做的。
过程如下;
用DLL扩展,建立一个DLL,里面添加一个对话框,然后设置为导出AFX_EXT_CLASS,
如果这样的话,编译会报错,在.h里说IDD=ID_DIALOG1没有定义ID_DIALOG1,汗一把,
这个不是在Resource.H里定义了么,于是在.h里重新定义了下资源头文件的引用,编译,通过了。

然后再建立一个对话框,采用静态链接的方式,#include"类头文件",#pragma comment "库文件"
随便搞一个按钮事件,调用DLL里的对话框,编译报错,说没有找到ID_DIALOG1

哎,继续找问题所在!
回复
cdsnpeter 2010-04-28
调用DLL的时候若报错,你要思考是否你的用法是否正确。
你是如何使用Dll中资源的?
回复
dong364 2010-04-28
rebuild一下即可
回复
羽毛乱发 2010-04-28
[Quote=引用 8 楼 wangli820 的回复:]
#include "resource.h"
[/Quote]

这个我试过了,放在stdafx.h里面,DLL编译能够通过,但是调用DLL的时候,还是同样报错的。

怎么这样子啊,奇怪了,高手帮我解决下!
回复
wangli820 2010-04-28
#include "resource.h"
回复
这不是鸭头 2010-04-28
[Quote=引用 6 楼 yincheng01 的回复:]
看看其他的对话框中有没重名的,修改出对应的对话框名称
[/Quote].
回复
尹成 2010-04-28
看看其他的对话框中有没重名的,修改出对应的对话框名称
回复
cdsnpeter 2010-04-28
尴尬,这种编译错误应该不是很难把?定位错误地点,原因稍微分析就晓得了吧?
回复
羽毛乱发 2010-04-28
[Quote=引用 3 楼 oyljerry 的回复:]
资源中是否有对应的名称的对话框ID,修改出对应的对话框名称
[/Quote]
这个肯定没有的,我都是新建的,怎么可能冲突呢,何况就加了一个对话框而已,其它有没有的。

很郁闷啊!
回复
oyljerry 2010-04-28
资源中是否有对应的名称的对话框ID,修改出对应的对话框名称
回复
cdsnpeter 2010-04-28
编译错误,看看resource.h包含正确不。
回复
羽毛乱发 2010-04-28
还有,我将位图导入进去,也不能用,也是说找不到资源,晕死我了!
回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2010-04-28 04:25
社区公告
暂无公告