VC++程序编译后不能脱离原来的环境吗?似乎需要一些dll文件

gaoxiaofeng 2000-03-13 10:04:00
...全文
353 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fupf88 2000-03-14
  • 打赏
  • 举报
回复
你的警告应从PROJECT->SETTING中解决,我觉得警告一定要解决,
而且这是提高编程的捷径,具体到你的问题,可能一是由于动态库冲突,
还有可能是用了一些较新的控件,因为未看到你的程序,所以不敢妄言
sayi 2000-03-14
  • 打赏
  • 举报
回复
In MSVC6++ there is a tool called Depends, you can use this tool to find any DLLs you application using. Some of them are system used, such as KERNEL32.DLL and USER32.DLL, others may not contains in the final users system directory.
If your application use [use MFC in a shall dll] build command, and you want to dispatch your application to others, you should dispatch these DLLs either.
If your application build with [use MFC in a static library] command, these DLLs are contains in your application, but the size will be larger and speed will be faster.
Of course, when you dispatch your application, you should build it in Release model.
michel 2000-03-14
  • 打赏
  • 举报
回复
如果是静态连接加debug模式,程序大小确实很大,如果是动态连接,则必须带上三个
dll文件,Mfc42d.dll(909k),Mfco42d.dll(781k),Msvcrtd.dll(377k),
只要将这三个文件copy到windows的system目录下即可。
如果想要脱离原来的环境,就应使用release模式,而且程序大小可减少一半。
packager 2000-03-14
  • 打赏
  • 举报
回复
如果按debug模式编译,那么程序需要mfc42d.dll.
如果按debug+unicode版编译,那么程序需要mfc42ud.dll.
注意到了数字后面的字母了吗?d代表debug,u代表unicode,不同版本编译出来的需要不同的dll.
如果按release模式编译,那么程序就要mfc42.dll,不过这个dll在你装windows后,系统
的system目录就已经带了,所以如果你按release编译,可以脱离vc的开发环境来正常运行.
geofee 2000-03-14
  • 打赏
  • 举报
回复
用depends检查需要的dll一切搞定,没有那么复杂嘛!
程序还是debug版当然大,请release!
literal 2000-03-14
  • 打赏
  • 举报
回复
vc的编译后的文件若是静态连接则不需要额外的dll,但比较大,使用动态连接则需要几个DLL文件,这主要因为你用了MFC,若纯用自己写的类,则无须另加dll.
JJONY 2000-03-14
  • 打赏
  • 举报
回复
一般用Appward生成的工程文件,它会为你生成两个版本,这大家都很清楚的。一个是包含调试代码的Debug,而另一个是发行Release版。
如果要把应用程序发行的话就要用Release版,是比Debug生成的应用程序小很多的。你在应用程序中所调用的API函数在应用程序只有一个函数头没有函数体的。VC的环境为你提供了这些函数的DLL的路径,所以你的应用程序就可以顺利地执行。离开了环境你就要自己维护这些路径,那么如果你的程序不大,只调用了一些MFC类时。你就可以只需携带一个MFC42.DLL文件就可以了。如果你想知道你的程序究竟调用了哪些API在哪些DLL中的话,你可以用Dumpbin程序(在VC的BIN目录中)来看一看就知道了。但建议尽可能不要用静态连接的方法。
Brierbird 2000-03-13
  • 打赏
  • 举报
回复
呵呵。可以脱离的啦,这样解决:
使用静态链接,同时选用Release方式。
你试试就知道了,可以搞定的。
gaoxiaofeng 2000-03-13
  • 打赏
  • 举报
回复
我看到别人的程序似乎dll很小,加上一些其他文件才1M,为什么?是因为我使用了一些windows函数吗?我的程序需要mfc42d.dll ,mfco42d.dll , msvcrtd.dll
gaoxiaofeng 2000-03-13
  • 打赏
  • 举报
回复
此外,我发现exe文件大了许多,原来只有不到200k,现在有2.12M,不会一定要这么大吧?
gaoxiaofeng 2000-03-13
  • 打赏
  • 举报
回复
发现用静态连接mfc后,出了很多(5个)warning:
一个关于链接的,其他四个都是关于view.cpp中的#include "stdafx.h"
为什么会这样?
mach 2000-03-13
  • 打赏
  • 举报
回复
VC++程序编译后不能脱离原来的环境,主要是因为用到mfc
有两种解决办法
1.在你的程序的发行版附上所需的msvc*.dll
2.建立项目时选择静态连接mfc
这几天看了很多关于脱离框架运行C#程序的文章,千篇一律,都是讲飞信方案的,此方案涉及一些法律问题,只能自己研究一下,后来用google美国网站搜了一把,看了些文章,无意中发现mono,又用mono关键字到google中国搜了一把,已经有人实现控制台程序脱离.net框架了。 其实就是换mono的公共语言运行时来使用。这样做的好处是体积小,发布免安装。首先,您需要下载mono的最新版。 http://ftp.novell.com/pub/mono/archive/1.9.1/windows-installer/2/mono- 1.9.1-gtksharp-2.10.4-win32-2.exe,安装后,就可以继续进行了。 1、用Visual Studio创建一个Windows应用程序,假设叫做WinApp,并添加一个按钮。 2、编译此项目,得到一个WinApp.exe文件。 3、自己建立一个文件夹WinApp,其中再建立bin和lib这两个文件夹 4、将mono安装文件夹中的bin和lib子文件夹中需要文件拷贝至刚才建立的那两个文件夹。mono的默认安装位置是:C:\Program Files\Mono-1.9.1 5、将需要运行的exe文件放入WinApp文件夹。 6、调用,可以使用bat批处理来调用,bin\mono.exe WinApp.exe。(其实写个VC++的小程序调用最好,可以我很菜) 好了,发个代码上来,有兴趣的朋友可以研究一下,7zip打包后仅3.26MB,却实现了免安装微软庞大的框架。此测试项目我在纯净的虚拟机和本机均测试过,但有个bug,mono对中文路径支持不好,如若有中文路径,则无法运行。我后来又试了用C:\Program Files\Mono-1.9.1\bin\mono.exe来执行,则没有中文路径问题。我觉得缺少了哪个文件,一个一个试着拷贝到WinApp文件夹中,再用批处理来执行,还是错误。后来干脆将整个安装目录的文件全搬到WinApp目录中,执行批处理还是失败,可是用C:\Program Files\Mono-1.9.1\bin\mono.exe来执行就是能成功,百思不得其解啊!究竟少了什么东西呢? 注意:例子中的dll文件已经为最精简,一个都不能缺少,我是用最笨的办法,删除到回收站,运行,重复此过程来确定需要保留哪些dll的。如果你机子上装有.net框架,你当然可以直接运行此程序,或者用bat来运行也可以,效果是不一样的。
  黑月是类似于斩月,目的是将易语言程序小型化,脱离支持库运行的工具。但实现原理和方法又与斩月不同,不需要类似的斩月壳,而是分析并转化易程序为对象文件obj,再用链接器LINK.EXE重新编译链接。这样生成的黑月程序,具有更规范更优化的PE程序文件结构,并且带来更多的功能扩展(比如使用RC资源脚本生成PE标准资源),以及带来下好处:   1、具有正常的PE可执行文件结构,经过反编译后生成的易程序代码清晰可见,完全呈现。汇编代码可分析可用专用软件跟踪调试,不会再产生误报。   2、在脱离核心支持库的同时,又不废除原有核心库命令,而是转向调用功能类似的黑月核心库。就是说,黑月可以使用大部分的原核心库命令(非窗口操作),并且黑月核心库为本人模仿原核心库功能,再重新编写的静态库。由于黑月先天优势,可以静态库抽取代码片段合成编译,就是用到的命令函数才提取相应部分代码。不用到命令不合成到目标程序。这样的好处是既保持原有功能不变,又不使程序文件大小增加,附带冗余代码。   4、黑月可以使用PE标准资源,用RC脚本编译生成。比如使用资源对话框模板创建窗口,并配合可视化的黑月RC脚本编辑器,比斩月又多一种更方便的界面设计功能,而且与汇编和C语言的RC脚本兼容通用,使黑月程序更接近于常规程序。   5、黑月的Dll可以使用类似其它语言DLLMAIN入口函数(黑月为“Dll入口函数”),可以通过Dll的模块句柄访问Dll的PE资源、注入进程、多线程应用等等优点。   6、黑月可以突破易语言自身的限制,实现对__cdecl调用方式函数的支持,并且可以在编译时链接其它由C语言或MASM32汇编语言编写的静态库,这又大大的增强了功能扩展,对众多C语言代码资源的利用,和软件工程的协作开发创造了便利条件。   7、易友们一直梦想的静态库抽取合成编译,今天在黑月已经实现了!   8、黑月完全脱离了易的结构,不会在出现误报的情况,并且支持各类猛壳例:VM等等。 (黑月支持的核心库命令看随后的附表) 界面截图: 黑月相关: 黑月是我的一位好友,云外归鸟数月的心血的作品,它完全免费,无任何限制,一位值得佩服的程序员。 黑月的最终编译,窗口设计,基本命令库,等,与易是没有直接关系了。 原本黑月只是以插件的形式安装到易程序目录中的,为方便只用黑月编写程序的网友们,我特意制作了一个黑月专用版。 本集成包只包含了黑月 v1.3+易语言 v4.13的Ide压缩而成,其他对于黑月无用的支持库与其他文件一律精简! 黑月比较复杂需要有一定的编程基础,特别需要对Api有较强的认识。 注:本集成包中提供的易语言程序属于商业软件,是供学习研究之用,请在24小时内删除或购买正版。 黑月官方:http://www.basic8.com.cn 常见问题: 问:黑月使用什么语言编写的? 答:VC++ 6.0 问:黑月是否已支持__cdecl调用方式的外部函数? 答:支持

16,465

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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