为什么说没有找到MFC42D.DLL这个文件?

dongyi940333 2006-02-11 09:59:39
我在VC中新建了一个单文档项目Fractal.在运行时出现下面错误:
Fractal.exe – 无法找到组件
没有找到MFC42D.DLL,因此这个应用程序未能启动.重新安装应用程序可能会修复此问题.

解决方法:
单击工程/设置菜单命令,打开Project Settings选项卡,里面有一个Microsoft Foundation Classes
选项,如果我将此选项选为Use MFC in a Static Library则程序执行正常,如果此选项选为Use MFC
in a Shared DLL则执行时就会出现上述错误.
问题:
1:Use MFC in a Static Library和Use MFC in a Shared DLL这两个选项有什么区别.?
2:MFC42D.DLL这个文件是干什么用的?
...全文
18048 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongyi940333 2006-02-15
  • 打赏
  • 举报
回复
这两天感冒,发烧。今天才好,谢谢各位大侠的解答
kelinwang19 2006-02-13
  • 打赏
  • 举报
回复
debug版本包含一些调试信息,比较大,一般只用于调试,在软件发布的时候,用Release版本

选择static不需要加载用于调试的动态库,而选择shared就需要发布相应的库
rageliu 2006-02-13
  • 打赏
  • 举报
回复
选择static 后release就可以了

如果选的是shared后release,就需要将xx.dll一起发布
我是潘东东 2006-02-12
  • 打赏
  • 举报
回复
放到编译好的EXE文件目录下不行吗
king1980 2006-02-12
  • 打赏
  • 举报
回复
rebuild all就可以了。
cn_archer 2006-02-12
  • 打赏
  • 举报
回复
这种问题,简单地说,就是编译出的程序需要VC开发环境中的某些DLL的支持。把这些动态链接库和应用程序放在同一目录下即可解决问题。
如果要了解深层的原因,请参考楼上的帖子
^_^
蒋晟 2006-02-12
  • 打赏
  • 举报
回复
你有可能想在这种极限情况下调试你的代码,但是大多数时间内,内存分配不会失败,而设置条件断点又太麻烦了。这时候可以在代码里面加上一段用来在内存分配失败时触发调试器的断言代码
void MyZeroMemory(char* strBuffer, int length)
{
assert(strBuffer!=NULL);
}

如果使用的是MFC或者ATL,建议使用对应的宏ASSERT和ATLASSERT。现在你可以编写健壮的代码使得程序在strBuffer这块内存分配失败时也能够正常运行。

现在的问题是,加入的这些代码增加了应用程序的大小,减慢了运行速度。在解决了内存分配失败造成的程序崩溃的问题之后,有必要在发布的版本中去掉这些断言代码。一个简单的办法是使用预处理标识符:

void MyZeroMemory(char* strBuffer, int length)
{
#ifdef DEBUG
assert(strBuffer!=NULL);
#endif
}

这样你可以只维护同一份代码。当然,这也意味着调试的代码在发行版中会被去除,所以为了避免不可预料的行为,为了调试而加入的代码应该尽可能少地影响应用程序的行为。
http://blog.joycode.com/jiangsheng/archive/2006/02/05/71101.aspx
dongyi940333 2006-02-11
  • 打赏
  • 举报
回复
大家既然提到了DEBUG版本和RELEASE版本,这里我还有一个问题:

我老听说编译的程序有DEBUG版本和RELEASE版本,它们到底是什么?在实际的开发中有什么区别?应该用那一个?小弟才学SDK编程,开发环境是VC,在VC中怎样区分这两个版本,默认的是什么版本?请各位高手多多指教,谢谢!
halfdream 2006-02-11
  • 打赏
  • 举报
回复
编译成RELEASE版就行了..
MFC42.DLL..这种名字带D的DLL表示是调试版用的DLL,在缺省的WINDOWS系统里面没有这种DLL,
安装VC开发环境的机器里会有它.
hornzen 2006-02-11
  • 打赏
  • 举报
回复
那就得缺什么找什么出来了.
playboxer 2006-02-11
  • 打赏
  • 举报
回复
是不是DEBUG版本的原因呀?我也碰到过,RELEASE就不会有了
dongyi940333 2006-02-11
  • 打赏
  • 举报
回复
你能不能再说的详细一些,如果我选Use MFC in a Shared DLL这个选项,怎么样才能让程序正确的执行,谢谢!
DentistryDoctor 2006-02-11
  • 打赏
  • 举报
回复
1.Use MFC in a Static Library,在静态库中使用MFC,这样发行时就不需要MFC的DLL,否则,发行时需要一并发生MFC的动态库。
2.MFC42D.DLL是4.2版的MFC的DLL。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧