java控制台应用程序程序是什么应用,起什么作用

> win32控制台程序如何应用MFC中的类库
win32控制台程序如何应用MFC中的类库
wing_xl & &
发布时间: & &
浏览:10 & &
回复:1 & &
悬赏:0.0希赛币
win32控制台程序怎么应用MFC中的类库今天用VS2010写了一个小程序& 想用CString类
虽然cstring也能完成这个功能但就是想尝试一下在控制台程序下怎么用MFC类库
在控制台下使用MFC的CString1)添加afx.h头文件,但是注意要添加到所有#include之前。2)对于vc6.0:Project -& Settings-&General,在Microsoft Foundation Classes,选择Using MFC in a shared Dll。对于vs2008Project -&Property Pages -& Configuration Properties -& General -& Project Defaults -&Use of MFC, 选择Use MFC in a Shared DLL.下面是一个测试代码,实现了CString向wstring的转化。  C/C++ code  #include &afx.h&
#include &iostream&
#include &string&
int main()
CString strMFC(&minmin, i love you&);
wstring strSTL=strMFC.GetBuffer();
strMFC.ReleaseBuffer( );
wcout$<$strSTL$<$
}wInG16 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-win32,mfc,clr这些控制台应用程序有什么区别?
win32,mfc,clr这些控制台应用程序有什么区别?
09-09-25 & 发布
WIN32 是本机程序 一般是调用WINDOWS APIMFC 是封装了WINDOWS API 的C++类,开发效率要高些CLR是就是。NET平台,相当于一个虚拟机,官方称为托管代码,挺像JAVA的
请登录后再发表评论!1410人阅读
获取当前程序文件的路径也算是一个比较常见的需求,比如我有一个文件conn.xml位于.exe的同一目录,在运行时需要从中读取一些设置信息。&  &  进程对象在.NET中表现为System.Diagnostics.Process类,通过调用Process.GetCurrentProcess().MainModule.FileName可获得当前执行的exe的文件名。但是这个方法得到的仅仅是文件名,如果程序运行期间没有切换工作目录,那么可以调用System.IO.Path的方法获取绝对路径。但是当前目录同样可以通过Environment.CurrentDirectory获得,而且很多软件在使用Open Dialog打开文件的时候,都会切换工作目录,而使得这一机制失效。&  如果是在Windows Forms应用程序中,当前应用也表现为System.Windows.Forms.Application对象,通过其静态属性Application.ExecutablePath和Application.StartupPath,可以取得可执行文件的路径和启动路径。&  但如果不是在Windows应用中呢,或者是在Library中呢,就算是Application对象的属性依然能获得,也需要在工程中添加System.Windows.Forms这个Assembly的引用,非常不方便。这个时候,可以通过Assembly的静态方法,GetCallingAssembly或者GetExecutingAssembly取得当前执行的Assembly,然后通过Assembly类的Location获取assembly的位置。&  但是使用Assembly的时候,可能会遇到权限方面的问题,同时Assembly.GetCallingAssembly或者Assembly.GetExecutingAssembly有可能得到的不是.exe文件的位置。在GAC中的添加了强名的Assembly,运行时是可以不必与.exe在同一目录的。&  .NET的进程启动时,会创建AppDomain,所有的Assembly都被Load到某一个AppDomain中,而AppDomain中提供了SetupInformation属性,可以获取AppDomain启动时的一些信息,因此,可以通过调用AppDomain.CurrentDomain.SetupInformation.ApplicationBase获取当前应用程序所在的路径。&  在通过以上方法取到所需的目录后,可以调用System.IO.Path的方法获取文件名,目录名,绝对路径等。停止对路径字符串的分析,而改用System.IO.Path类吧。&  开发.NET下应用程序时,了解Process/Application-&AppDomain-&Assembly的关系,对于实现正确的逻辑,是非常有帮助的。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:467071次
积分:5298
积分:5298
排名:第2382名
原创:90篇
转载:100篇
评论:101条
(1)(2)(2)(2)(2)(2)(4)(4)(2)(8)(2)(2)(4)(1)(14)(7)(1)(3)(7)(9)(5)(6)(8)(32)(12)(10)(5)(34)控制台应用程序 有什么用_百度知道
控制台应用程序 有什么用
现在都是窗口应用...还要控制台干嘛.
提问者采纳
.....都是学中文,那小学的时候还要学aoebpmf做什么呢?现在人类与电脑都是视图音频的交流,为什么还会出现C语言,C++呢??很多事情都是全面的,不要只看那个小角落
其他类似问题
为您推荐:
您可能关注的推广回答者:回答者:
控制台的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁控制台程序足够简洁,但是,经常会点错而误关闭。而且,如果系统关闭,或者用户注销,这时候任务还没完成的话,前面的运算电费就白出了。有没有办法和WinForm一样,对控制台的退出事件进行控制呢?有的!引入下面的函数
<SPAN style="COLOR: #&&&&&&&& public&delegate&bool&HandlerRoutine(int&dwCtrlType);<SPAN style="COLOR: #&<SPAN style="COLOR: #&&&&&&&&&[DllImport("kernel32.dll",&CharSet&=&CharSet.Auto)]<SPAN style="COLOR: #&&&&&&&&&public&static&extern&bool&SetConsoleCtrlHandler(HandlerRoutine&HandlerRoutine,&bool&add);委托HandlerRoutine,就是把函数的指针传递给系统API函数SetConsoleCtrlHandler。这是个典型的回调函数。然后在Main方法中调用
&&&&&&& && Program&p&=&new&Program();&&&&&&&&&&&&if&(!SetConsoleCtrlHandler(p.HandlerRoutineMethod,&true))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&Console.WriteLine("Unable&to&install&event&handler!\n");&&&&&&&&&&&&}
&&&&&&&&const&int&CTRL_C_EVENT&=&<SPAN style="COLOR: #;&&&&&&&&const&int&CTRL_BREAK_EVENT&=&<SPAN style="COLOR: #;&&&&&&&&const&int&CTRL_CLOSE_EVENT&=&<SPAN style="COLOR: #;&&&&&&&&const&int&CTRL_LOGOFF_EVENT&=&<SPAN style="COLOR: #;&&&&&&&&const&int&CTRL_SHUTDOWN_EVENT&=&<SPAN style="COLOR: #;&&&&&&&&public&bool&HandlerRoutineMethod(int&dwCtrlType)&&&&&&&&{&&&&&&&&&&&&Console.WriteLine(dwCtrlType.ToString());&&&&&&&&&&&&switch&(dwCtrlType)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&case&CTRL_C_EVENT:&&&&&&&&&&&&&&&&&&&&return&true;&&&&&&&&&&&&&&&&case&CTRL_BREAK_EVENT:&&&&&&&&&&&&&&&&&&&&return&false;&&&&&&&&&&&&&&&&case&CTRL_CLOSE_EVENT:&&&&&&&&&&&&&&&&&&&&Console.WriteLine("确实要退出程序么?如果需要退出,请输入'exit'。");&&&&&&&&&&&&&&&&&&&&return&true;&&&&&&&&&&&&&&&&case&CTRL_LOGOFF_EVENT:&&&&&&&&&&&&&&&&&&&&//用户退出&&&&&&&&&&&&&&&&&&&&return&false;&&&&&&&&&&&&&&&&case&CTRL_SHUTDOWN_EVENT:&&&&&&&&&&&&&&&&&&&&//系统关闭&&&&&&&&&&&&&&&&&&&&return&false;&&&&&&&&&&&&}&&&&&&&&&&&&return&true;&&&&&&&&}HandlerRoutineMethod函数,就是系统的真实回调。如果返回的结果为false,则程序关闭,否则,不会关闭。这里只在CTRL_BREAK_EVENT(按下Ctrl+Break),CTRL_LOGOFF_EVENT用户退出,和系统关闭&CTRL_SHUTDOWN_EVENT,事件时,调用了return false,也就是说,这个时候会关闭。但是在关闭之前我们可以做一些操作。试想这样的情况,这个任务可能需要运行很长时间,要能在程序关闭的时候有个保存当前进度的方法,那么就可以采用以上操作了。来看个完整的代码
&1&&&&&class&Program&2&&&&&{&3&&&&&&&&&static&void&Main(string[]&args)&4&&&&&&&&&{&5&&&&&&&&&&&&&Program&p&=&new&Program();&6&&&&&&&&&&&&&if&(!SetConsoleCtrlHandler(p.HandlerRoutineMethod,&true))&7&&&&&&&&&&&&&{&8&&&&&&&&&&&&&&&&&Console.WriteLine("无法注册系统事件!\n");&9&&&&&&&&&&&&&}<SPAN style="COLOR: #&<SPAN style="COLOR: #&&&&&&&&&&&&&while&(true)<SPAN style="COLOR: #&&&&&&&&&&&&&{<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&string&s&=&Console.ReadLine();<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&if&(s&==&"exit")<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&GenerateConsoleCtrlEvent(p.CTRL_BREAK_EVENT,&<SPAN style="COLOR: #);<SPAN style="COLOR: #&&&&&&&&&&&&&}<SPAN style="COLOR: #&&&&&&&&&}<SPAN style="COLOR: #&<SPAN style="COLOR: #&&&&&&&& const&int&CTRL_C_EVENT&=&<SPAN style="COLOR: #;<SPAN style="COLOR: #&&&&&&&&&const&int&CTRL_BREAK_EVENT&=&<SPAN style="COLOR: #;<SPAN style="COLOR: #&&&&&&&&&const&int&CTRL_CLOSE_EVENT&=&<SPAN style="COLOR: #;<SPAN style="COLOR: #&&&&&&&&&const&int&CTRL_LOGOFF_EVENT&=&<SPAN style="COLOR: #;<SPAN style="COLOR: #&&&&&&&&&const&int&CTRL_SHUTDOWN_EVENT&=&<SPAN style="COLOR: #;<SPAN style="COLOR: #&<SPAN style="COLOR: #&&&&&&&&&public&bool&HandlerRoutineMethod(int&dwCtrlType)<SPAN style="COLOR: #&&&&&&&&&{<SPAN style="COLOR: #&&&&&&&&&&&&&Console.WriteLine(dwCtrlType.ToString());<SPAN style="COLOR: #&&&&&&&&&&&&&switch&(dwCtrlType)<SPAN style="COLOR: #&&&&&&&&&&&&&{<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&case&CTRL_C_EVENT:<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&return&true;<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&case&CTRL_BREAK_EVENT:<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&Save();<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&return&false;<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&case&CTRL_CLOSE_EVENT:<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&Console.WriteLine("确实要退出程序么?如果需要退出,请输入'exit'。");<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&return&true;<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&case&CTRL_LOGOFF_EVENT:<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&//用户退出<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&Save();<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&return&false;<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&case&CTRL_SHUTDOWN_EVENT:<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&//系统关闭<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&Save();<SPAN style="COLOR: #&&&&&&&&&&&&&&&&&&&&&return&false;<SPAN style="COLOR: #&&&&&&&&&&&&&}<SPAN style="COLOR: #&&&&&&&&&&&&&return&true;<SPAN style="COLOR: #&&&&&&&&&}<SPAN style="COLOR: #&<SPAN style="COLOR: #&&&&&&&&&void&Save()<SPAN style="COLOR: #&&&&&&&&&{<SPAN style="COLOR: #&&&&&&&&&&&&&&&&& //保存当前进度<SPAN style="COLOR: #&&&&&&&&&}<SPAN style="COLOR: #&<SPAN style="COLOR: #&&&&&&&&&public&delegate&bool&HandlerRoutine(int&dwCtrlType);<SPAN style="COLOR: #&<SPAN style="COLOR: #&&&&&&&&&[DllImport("kernel32.dll",&CharSet&=&CharSet.Auto)]<SPAN style="COLOR: #&&&&&&&&&public&static&extern&bool&SetConsoleCtrlHandler(HandlerRoutine&HandlerRoutine,&bool&add);<SPAN style="COLOR: #&<SPAN style="COLOR: #&&&&&&&&&[DllImport("kernel32.dll",&CharSet&=&CharSet.Auto)]<SPAN style="COLOR: #&&&&&&&&&public&static&extern&bool&GenerateConsoleCtrlEvent(int&code,&int&value);<SPAN style="COLOR: #&&&&&}先 是用SetConsoleCtrlHandler方法,设置了HandlerRoutineMethod为他的回调函数。那么当有事件过来的时候,会先调用这个方法。这个方法return false,则窗体关闭,true,则窗体不关闭。GenerateConsoleCtrlEvent方法是通知系统事件的。我们这里假设,只有用户输入exit,或者按Ctrl+Break的时候程序退出。对于用户退出和系统关闭,只是保存当前进度。在while&循环中,如果用户输入exit命令,则通知系统调用回调函数HandlerRoutineMethod,调用的事件是Ctrl+Break。现在控制台是不是比以前好用了很多呢?:)全文完。 by yurow.
阅读(...) 评论()

我要回帖

更多关于 控制台程序是什么 的文章

 

随机推荐