VC++2005如何编写脱离.Net环境的程序?

tdhao 2007-12-14 04:58:33
新建一个Win32命令行空白项目,然后自己添加一个C++文件
//代码如下:

#include <iostream>

int main()
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)
{
printf("%d×%d=%d\t",j,i,j*i);
}
printf("\n");
}
return 0;
}

以上代码用VC++2005编译好后复制到未安装.Net Framework的电脑上运行出现
"由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。"

新建了一个安装项目,看到安装包里面包含两个文件
policy_8_0_microsoft_vc80_debugcrt_x86.msm
Microsoft_VC80_DebugCRT_x86.msm

有什么方法可以不调用这些东东?就说简单的,我直接复制Exe文件就可以使用,不想用安装包注册DLL
因为这么简单的东西编译出来也就是48KB如果打包成安装程序就有2MB大
...全文
517 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bgyl2002 2007-12-29
  • 打赏
  • 举报
回复
楼主,好人啊!
  • 打赏
  • 举报
回复
静态链接运行库.
「已注销」 2007-12-25
  • 打赏
  • 举报
回复
RELEAS下编译,另外拷贝几个DLL就行了,VC.NET非托管代码不需要其他.NET类库支持的
tdhao 2007-12-18
  • 打赏
  • 举报
回复
1.在VC++2005中编译了一个win32程序,未装.NET的机器上不能运行(VC++生成非托管代码)

方法一:工程属性->C/C++->代码生成: “运行时库”处选择 Multi-threaded (/MT) 或 Multi-threaded Debug (/MTd) 不要选 Multi-threaded DLL (/MD) Multi-threaded Debug DLL (/MDd)

方法二:在C:\Program Files\Microsoft Visual Studio 8\VC\redi
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT下找到了下列文件:

msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest

把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以运行那个程序了。

2.VC++带模板函数时能编译不能连接,显示连接错误“error LNK2019: 无法解析的外部符号”

解决方法:用模板的时候,把声明和实现放在一个文件里。因为模板的机制决定了不可能把模板的CPP象其它方式(不用模板)一样编译成一个obj,数据类型都是程序中用到时才会知道的,这时连接的函数名也会因类型不同而不同,所以多数编译器都要求写在一个文件中。

3.如果在VC++2005的程序中使用UNICODE字符集的API等函数,可以在项目属性->配置属性->字符集处选“使用UNICODE字符集”,如果只用ASCII码,就选“未设置”即可!
fire81x 2007-12-17
  • 打赏
  • 举报
回复
不错不错,又学到知识了
伊点阳光 2007-12-15
  • 打赏
  • 举报
回复
顶你一手,我是新手。
tdhao 2007-12-14
  • 打赏
  • 举报
回复
哎,看来是还是百度有用,问题解决了

只要把生成方式从Debug改成Release就可以了

这样生成出来的程序也小了很多
tdhao 2007-12-14
  • 打赏
  • 举报
回复
难道这里没人看的哦?
tdhao 2007-12-14
  • 打赏
  • 举报
回复
#include <iostream>
是否是因为使用了这个?
如果是应该使用哪个头文件?
为了让.Net程序脱离.Net Framework框架运行我试了很多方法,网上说的基本都试过了,最效果都不太理想,最后我还是选择了现在比较流行的软件飞信中带的VMDotNet,也就是所谓的.NET FRAMEWORK虚拟机吧。相信有很多人也已经看过相关文章了,但是对于新手我还是再提一下,在你的飞信的安装目录下有一个VMDotNet文件夹,这个就是我们要用的最主要的内容了,先把它COPY出来吧! 下面先来简单说明一下VMDotNet文件夹吧,在这个文件夹之下有一个v2.0.50727文件夹,很明显是.NET FRAMEWORK的版本号啦,进入这个文件夹,里面有一个FetionVM.exe的可执行文件(飞信的图标),这个便是我们要用到的虚拟机文件了。其 它文件我们不用考虑。这个程序可以带入一个参数,即要在此虚拟环境下运行的程序的路径。形如FetionVM.exe C:\1.exe,也可以使用相对路径:FetionVM.exe 1.exe,当然这样要求两者在同一目录下啦。这里顺便要再说一下VMDotNet.log这个文件,这里记录了在调用FetionVM.exe时的错误 信息,主要是路径不对,找不到对应的程序。在了解了这个文件夹之后,我们可以动手开始做啦! 最后,为了在没安装.Net Framework的环境启动,要用其它语言写一个启动程序,来带动你的主程序.这个程序我找做C++的朋友帮写了一个,然后,只要把你们做的.NET程序中bin/debug/下可执行文件放到app文件夹下,并且命名为:9527.exe(9527是周星星的警号,好记),即可通过双击这个C++程序(无FrameWork运行示例主程序.exe)带动.NET程序了.
内容简介 本书系编程语言先驱者Ivor Horton的经典之作,是学习C++编程最畅销的图书品种之一,不仅涵盖了Visual C++ .NET编程知识,还全面介绍了标准C++语言和.NET C++/CLI。本书延续了Ivor Horton讲解编程语言的独特方法,从中读者可心学会Visual C++ 2005的基础知识,并全面掌握在MFC和Windows Forms中访问数据源的技术。此外,本书各章后面的习题将有助于读者温故而知新,并尽快成为C++高效程序员。 本书学习目标:学习如何使用Visual C++2005编程;Visual C++ 2005的新增功能;程序调试的基础知识和技术;构建程序GUI;如何构建Microsoft Windows应用程序脱离复杂的Windows GUI编程知识,深入理解C++细节知识。 本书读者对象:本书适用于想学习如何为Microsoft Windows OS编写C++程序的初学者,学习本书无需任何编程基础。 作者简介 Ivor Horton是世界著名的计算机图书作家,主要从事与编程相关的顾问及撰写工作,曾帮助无数程序员步入编程的殿堂。他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。Ivor Horton还著有Beginning visual C++6、Beginning C Programming和Beginning Java 2等多部入门级好书。
这几天看了很多关于脱离框架运行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来运行也可以,效果是不一样的。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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