mfc中程序可以执行,但是exe文件不能执行

lanse20_2008 2013-12-14 04:44:12
如题,程序打开后,单击运行,程序可以正确运行。但是在release或者debug下面点击生成的.exe文件时候,却出现错误:无法启动此程序,因为计算机中丢失**.dll。尝试重新安装该程序以解决此问题。**.dll是我自己生成的动态链接库,这个已经编译好,并且可以放在程序中可以正常运行。
请大家看看什么问题。原来的程序是vs2008的,后来我移植到了vs2010上面了,一些动态库不能用,我又重新生成的动态库。
谢谢啦~
...全文
810 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanse20_2008 2013-12-19
  • 打赏
  • 举报
回复
问题解决了,就是没有找到路径,使用的是vs2010,在项目属性下面会有相应的配置。我调用dll的方式也不对,改了过来,就没事了,谢谢大家了~
赵4老师 2013-12-16
  • 打赏
  • 举报
回复
Windows searches for the DLL file in the following sequence: The directory from which the application loaded. The current directory. Windows 95 and Windows 98: The Windows system directory. Use theGetSystemDirectory function to get the path of this directory. Windows NT: The 32-bit Windows system directory. Use the GetSystemDirectory function to get the path of this directory. The name of this directory is SYSTEM32. Windows NT: The 16-bit Windows system directory. There is no function that obtains the path of this directory, but it is searched. The name of this directory is SYSTEM. The Windows directory. Use theGetWindowsDirectory function to get the path of this directory. The directories that are listed in the PATH environment variable.
边走边瞧 2013-12-16
  • 打赏
  • 举报
回复
代码重新写,动态加载dll吧。
5t4rk 2013-12-16
  • 打赏
  • 举报
回复
是不是你的库引用中涉及到了间接引用。 版本差异之类的。
xiaohuh421 2013-12-16
  • 打赏
  • 举报
回复
还有要注意你在release下与debug下生成的dll文件的文件名是否相同, 如果不同, 那么你在文件中是否有编译条件, 在不同环境下引用不同名字的dll库? 你的问题一般就是: 1. 路径问题 2. 文件名问题
xiaohuh421 2013-12-16
  • 打赏
  • 举报
回复
注意, 可能调试运行与直接运行环境是不同的, 你最好是测试到release目录中直接运行你的程序, 如是要提示缺少库, 就把那个dll复制到release目录中. 再运行. 不般的dll是不需要注册的, 如果只是提供接口, 没听说过要注册.
幻夢之葉 2013-12-16
  • 打赏
  • 举报
回复
你放在一般目录下,如果链接时没有指定绝对路径是找不到的! 1.把dll放在system32目录下 2.使用绝对路径 3.间接查找,比如环境变量,注册表或者自己写的配置文件等等!
baichi4141 2013-12-15
  • 打赏
  • 举报
回复
引用 9 楼 lanse20_2008 的回复:
我想问下,就是怎么才能让程序找到dll所在的文件啊?我的项目的工作目录就是在当前目录下啊,对这个还是有点不明白
如果我告诉你D:\abc\文件夹下有一个可执行文件,它需要一个def.dll,请问你知不知道这个dll在哪里?你都不知道的事,你想让程序怎么知道? dll必须存在于硬盘上的某个地方,程序在启动时将按照一定的顺序寻找,如果这些地方都没有,你想让程序搜索整个硬盘?那如果硬盘上找不到,程序是不是应该上网查找自动下载? 没有那么多可能性,没有那么大的自由度,解决方案就两个:第一,了解自动查找dll的顺序,并在其中一个路径里放置所需的dll。第二:自己重写一个操作系统,添加全硬盘查找和上网下载功能。
unituniverse2 2013-12-15
  • 打赏
  • 举报
回复
引用 7 楼 lanse20_2008 的回复:
假如不注册,可以直接用吗?之前的好像没有注册哎
引用 6 楼 Ygamiaa 的回复:
[quote=引用 5 楼 lanse20_2008 的回复:] 没有,生成之后,直接用的,需要注册吗? [quote=引用 4 楼 Ygamiaa 的回复:] dll注册过了么?
应该要的。试试注册之后再执行EXE看看,或者试试把你的dll拷贝到system32路径下再执行看看[/quote][/quote] 你的DLL不需要像她说的那样“先注册”,实际上也注册不了。大概他的DLL都是COM组件库。普通的DLL是不注册的。
a_mu_lol 2013-12-15
  • 打赏
  • 举报
回复
这个真没必要纠结,要么和可执行文件在一块,要么注册到system32
lanse20_2008 2013-12-14
  • 打赏
  • 举报
回复
还有就是不使用环境变量那种方法,谢谢啦
引用 8 楼 baichi4141 的回复:
[quote=引用 3 楼 lanse20_2008 的回复:] 那怎么会出现“计算机中丢失**.dll”的问题啊?需要怎么配置呢?
可执行文件在启动时,会按照一定的路径顺序查找dll文件,如果这些路径中都没有所需要的dll文件,程序就无法启动 之所以在VS中能够启动程序,应该是因为VS把源代码所在文件夹作为“当前路径”,所以可以查找到该文件夹下的dll,但你不能依靠VS给你提供的功能,应该自己弄清楚这里面的原理[/quote]
lanse20_2008 2013-12-14
  • 打赏
  • 举报
回复
我想问下,就是怎么才能让程序找到dll所在的文件啊?我的项目的工作目录就是在当前目录下啊,对这个还是有点不明白
引用 8 楼 baichi4141 的回复:
[quote=引用 3 楼 lanse20_2008 的回复:] 那怎么会出现“计算机中丢失**.dll”的问题啊?需要怎么配置呢?
可执行文件在启动时,会按照一定的路径顺序查找dll文件,如果这些路径中都没有所需要的dll文件,程序就无法启动 之所以在VS中能够启动程序,应该是因为VS把源代码所在文件夹作为“当前路径”,所以可以查找到该文件夹下的dll,但你不能依靠VS给你提供的功能,应该自己弄清楚这里面的原理[/quote]
baichi4141 2013-12-14
  • 打赏
  • 举报
回复
引用 3 楼 lanse20_2008 的回复:
那怎么会出现“计算机中丢失**.dll”的问题啊?需要怎么配置呢?
可执行文件在启动时,会按照一定的路径顺序查找dll文件,如果这些路径中都没有所需要的dll文件,程序就无法启动 之所以在VS中能够启动程序,应该是因为VS把源代码所在文件夹作为“当前路径”,所以可以查找到该文件夹下的dll,但你不能依靠VS给你提供的功能,应该自己弄清楚这里面的原理
lanse20_2008 2013-12-14
  • 打赏
  • 举报
回复
假如不注册,可以直接用吗?之前的好像没有注册哎
引用 6 楼 Ygamiaa 的回复:
引用 5 楼 lanse20_2008 的回复:
没有,生成之后,直接用的,需要注册吗? [quote=引用 4 楼 Ygamiaa 的回复:] dll注册过了么?
应该要的。试试注册之后再执行EXE看看,或者试试把你的dll拷贝到system32路径下再执行看看[/quote]
冬天的傻瓜 2013-12-14
  • 打赏
  • 举报
回复
引用 5 楼 lanse20_2008 的回复:
没有,生成之后,直接用的,需要注册吗?
引用 4 楼 Ygamiaa 的回复:
dll注册过了么?
应该要的。试试注册之后再执行EXE看看,或者试试把你的dll拷贝到system32路径下再执行看看
lanse20_2008 2013-12-14
  • 打赏
  • 举报
回复
没有,生成之后,直接用的,需要注册吗?
引用 4 楼 Ygamiaa 的回复:
dll注册过了么?
冬天的傻瓜 2013-12-14
  • 打赏
  • 举报
回复
dll注册过了么?
lanse20_2008 2013-12-14
  • 打赏
  • 举报
回复
那怎么会出现“计算机中丢失**.dll”的问题啊?需要怎么配置呢?
引用 2 楼 baichi4141 的回复:
楼主实际遇到的问题是信息不畅 如果楼主知道一般的处理方法就是“将exe和dll放到同一个目录下”,那楼主就不会有疑问了 当然,也可以放在system32文件夹下,也可以放在某个特定文件夹下然后将该文件夹路径加入path环境变量内 静态编译的意思是不使用dll而使用lib mfc使用静态库,跟你自己的dll一点关系都没有
baichi4141 2013-12-14
  • 打赏
  • 举报
回复
楼主实际遇到的问题是信息不畅 如果楼主知道一般的处理方法就是“将exe和dll放到同一个目录下”,那楼主就不会有疑问了 当然,也可以放在system32文件夹下,也可以放在某个特定文件夹下然后将该文件夹路径加入path环境变量内 静态编译的意思是不使用dll而使用lib mfc使用静态库,跟你自己的dll一点关系都没有
lanse20_2008 2013-12-14
  • 打赏
  • 举报
回复
目前暂时的解决方法是将exe和dll放到同一个目录下时候,.exe文件会正常运行。但是我现在不想将exe和dll放到同一个目录下。网上说采用的方法是静态编译,然后我设置了工程属性中的MFC使用(在静态库中使用mfc)和运行库(多线程/MT),在release下面运行时候,出现的问题还和原来一样。求解决方法,谢谢

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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