编好的MFC程序在别人机子上运行出错:缺少MFC42.DLL

疯癫小程序 2010-04-05 06:49:06
我也知道是因为对方机子上没有安装VC6.0,所以没有MFC42.DLL动态连接库
解决的办法是在别人机子上安装对应的MFC42.DLL库,或者在一开始创建工程的时候
在第四步的时候选择静态链接库而不是动态连接库(DLL)
我的问题是:能不能在第四步选择动态连接库的基础上让程序在连接的时候就把所需要的连接的内容直接加进来,如果能
,那该怎么操作啊?
另外就是若真的要在对方机子上安装MFC42.DLL,那么单独安MFC42.DLL该怎么安装啊?
...全文
806 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯癫小程序 2010-04-09
  • 打赏
  • 举报
回复
结贴了,谢谢大家一直以来的关照,问题解决了,为了以后大家参考我现在总结一下:
如果大家想把自己做好的软件给别人用,可以采用动态Release版,这样的最小,具体操作步骤如
20楼所介绍,因为本来默认就是动态的,所以动态的就不用操作了。。。。
疯癫小程序 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 r3000 的回复:]
引用 30 楼 helonsy 的回复:
Release版的.exe文件怎么还比Debug版的还小
啊?前者是20k,而后者是108k,静态连接的Release
版是208k,静态连接的Debug版我回去再试...


当然小了,release版只是机器码,debug版还有调试信息啊,
因为是动态链接MFC所以文件很小,静态链接会大些,Debug版肯定比Release版大。
[/Quote]
Debug版静态连接是2.05M,呵呵,不是大一点点的事情啊,大的不知道多少倍了....
疯癫小程序 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 r3000 的回复:]
引用 18 楼 helonsy 的回复:
引用 16 楼 miaolingshaohua 的回复:
用Release版本就行了吧

求具体步骤,期待啊。。。。


没什么具体步骤,非常简单啊,选择“移除工程配置”,选择Release版。重新编译。
[/Quote]
我用你讲的方法,连接的时候出现了错误,如下:
Chat.obj:error LINK2001:Unresolved external symbol —imp—WSACleanup@0
..........
Release/Chat.exe:fatal error LNK1120:11 Unresloved externals
而且我改为静态连接库连接的时候好象出现的错误类似
前提:我在DLL下的Debug下跑的很HAPPY.
hgreminem 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 helonsy 的回复:]
引用 19 楼 r3000 的回复:
MFC42.DLL在XP以后的Windows版本中肯定是自带的,不带的话是不正常的。
MFC42D.DLL是MFC42.DLL的Debug版本,所以后面带了个'D',
没有安装VC6当然就没有了。

如果只是找不到MFC42D.DLL就简单了,直接选择Release编译成Release版本
就行了。

已经采用MFC共享DLL方式做好的工程,要……
[/Quote]
楼上的不是说了吗?
“project settings -》general -》Using mfc in static library”
至于你说的聊天软件
IP不固定是正常的,
可以通过动态域名解析
将服务端的IP动态绑定到一个域名
然后将当前服务端的IP和端口更新到这个域名下的某个文件上
如"http://***.***/ip.txt"
再然后客户端通过InternetOpen、InternetOpenUrl和InternetReadFileAPI
读取分析这个文件,
就知道服务端当前的IP和端口了
这个功能灰鸽子也使用过~~
动态域名可以用花生壳,免费的~~
  • 打赏
  • 举报
回复
使用静态库就行了,你应该用的是动态库来着
crystal_dark 2010-04-07
  • 打赏
  • 举报
回复
up
学习
康斯坦汀 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 helonsy 的回复:]
Release版的.exe文件怎么还比Debug版的还小
啊?前者是20k,而后者是108k,静态连接的Release
版是208k,静态连接的Debug版我回去再试...
[/Quote]

当然小了,release版只是机器码,debug版还有调试信息啊,
因为是动态链接MFC所以文件很小,静态链接会大些,Debug版肯定比Release版大。
疯癫小程序 2010-04-07
  • 打赏
  • 举报
回复
Release版的.exe文件怎么还比Debug版的还小
啊?前者是20k,而后者是108k,静态连接的Release
版是208k,静态连接的Debug版我回去再试...
疯癫小程序 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 hgreminem 的回复:]
引用 23 楼 helonsy 的回复:
引用 19 楼 r3000 的回复:
MFC42.DLL在XP以后的Windows版本中肯定是自带的,不带的话是不正常的。
MFC42D.DLL是MFC42.DLL的Debug版本,所以后面带了个'D',
没有安装VC6当然就没有了。

如果只是找不到MFC42D.DLL就简单了,直接选择Release编译成Release版本
就行了。

……
[/Quote]
关键是我没有服务器啊?我就编一个很小的程序,而且采用的也不是服务器/客户端模式,我采用的是异步套接子编程,就在一个线程里实现发送端和接受端,然后我把这个程序安装在两台电脑里进行通信的....这样行吗?如果这样怎么解决我的问题啊?
yanqg 2010-04-07
  • 打赏
  • 举报
回复
造成这种错误的原因可能是因为第三方库使用的运行库 和 使用该第三方库的应用程序使用的运行库不一致造成的。
工程和他的dll库要设置相同,都是在共享 DLL 中使用 MFC或都是静态
康斯坦汀 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 helonsy 的回复:]
引用 20 楼 r3000 的回复:
引用 18 楼 helonsy 的回复:
引用 16 楼 miaolingshaohua 的回复:
用Release版本就行了吧

求具体步骤,期待啊。。。。


没什么具体步骤,非常简单啊,选择“移除工程配置”,选择Release版。重新编译。

我用你讲的方法,连接的时候出现了错误,如下:
Chat.obj:error LINK200……
[/Quote]

看错误是链接库没有找到,你认真检查一下Debug和Release版的配置,肯定有库没有定义。
Project Settings -〉Link 那些.lib ,看看缺什么?


BlueAsuro 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hellward 的回复:]
选择静态库就行了啊project settings -》general -》Using mfc in static library,貌似没这么复杂吧
[/Quote]

没错
Eleven 2010-04-06
  • 打赏
  • 举报
回复
静态编译。。。
疯癫小程序 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 r3000 的回复:]
MFC42.DLL在XP以后的Windows版本中肯定是自带的,不带的话是不正常的。
MFC42D.DLL是MFC42.DLL的Debug版本,所以后面带了个'D',
没有安装VC6当然就没有了。

如果只是找不到MFC42D.DLL就简单了,直接选择Release编译成Release版本
就行了。

已经采用MFC共享DLL方式做好的工程,要换成编译为静态库,是需要修改些东西的,
……
[/Quote]
改成静态编译需要调整哪些东西啊?能讲讲吗?期待啊。。。。小弟愚昧
疯癫小程序 2010-04-06
  • 打赏
  • 举报
回复
问题现在解决了,但新问题出现了,我编的聊天工具是按照对方ip地址发送给数据的,而且程序用的端口号是
6000,我刚才我和一个人聊天(用的就是这个程序),但是老出现接收数据失败或绑定失败的消息框,是不QQ
类似的聊天工具用的端口和我的冲突啊,如果是那样的话,那QQ等类似的聊天工具怎么保证端口的唯一呢?
也就是不和其它软件的端口号冲突?
我朋友说她的Ip地址是不固定的,怎么用MAC地址来和对方交流啊?
我现在在追她,各位帮个忙,这样才能我学计算机的才华啊,她才能欣赏我啊,所以为了咱学编程的,大家一起帮我把这个软件做完吧?我还是学生,对做成品软件没经验。
arong1234 2010-04-06
  • 打赏
  • 举报
回复
带D后缀的表示debug版本,微软是不会带debug版本的dll的,楼主需要选择release编译,发布release版本,而不是debug版本
[Quote=引用 17 楼 helonsy 的回复:]
引用 15 楼 hilevel 的回复:
首先谢谢你不断的帮助,我刚在网吧里从新运行了其实弹出的消息框里不是MFC42.DLL,而是
MFC42D.DLL,这两个有区别吗?[/Quote]
康斯坦汀 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 helonsy 的回复:]
引用 16 楼 miaolingshaohua 的回复:
用Release版本就行了吧

求具体步骤,期待啊。。。。
[/Quote]

没什么具体步骤,非常简单啊,选择“移除工程配置”,选择Release版。重新编译。
康斯坦汀 2010-04-06
  • 打赏
  • 举报
回复
MFC42.DLL在XP以后的Windows版本中肯定是自带的,不带的话是不正常的。
MFC42D.DLL是MFC42.DLL的Debug版本,所以后面带了个'D',
没有安装VC6当然就没有了。

如果只是找不到MFC42D.DLL就简单了,直接选择Release编译成Release版本
就行了。

已经采用MFC共享DLL方式做好的工程,要换成编译为静态库,是需要修改些东西的,
不是简单就可以。
疯癫小程序 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 miaolingshaohua 的回复:]
用Release版本就行了吧
[/Quote]
求具体步骤,期待啊。。。。
疯癫小程序 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hilevel 的回复:]
一般Windows载入.DLL文件是先在程序目录中找,再到System32中找

我当时是先把mfc42.dll剪切到一个不相干的地方,然后程序不能运行了
然后把mfc42.dll和可执行文件(.exe)放在一起,运行正常
接着把程序单独拷到同学的电脑中(未装vc6.0,且没有mfc42.dll),不能运行
最后分别把mfc42.dll复制到System32或程序目录下,均能正常运行
……
[/Quote]
首先谢谢你不断的帮助,我刚在网吧里从新运行了其实弹出的消息框里不是MFC42.DLL,而是
MFC42D.DLL,这两个有区别吗?
加载更多回复(14)

15,471

社区成员

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

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