首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有请guotianyu2000,你那个以main开始的windows程序有事请问

2013-11-23 
有请guotianyu2000,你那个以main开始的windows程序有事请教首先声明,这个程序我完全能理解在干什么,只是有

有请guotianyu2000,你那个以main开始的windows程序有事请教
首先声明,这个程序我完全能理解在干什么,只是有不少细节还理解的不深,需要指教。

我所谓的有出处,是指是你自己想出来的么?
能解释下console子系统和Windows API的联系,还有main和WinMain?
还有可能运行时不显示那个console窗口?(当然现在显示是很正常的,因为首先它是个console应用,然后新开了线程创建窗口)
有无可能用WinMain开始,但是又带个console窗口?

我想我最疑惑的是:我一直没有用C++开发过窗口,即像这里的“纯”C++,当然我知道这个纯其实很好笑,我也经常笑这种纯论;只是我没有找到像这个程序的一个入口,纯粹由传统的main做入口,我想是我对Windows不太熟悉导致的吧,当然也跟Windows“隐藏”了不少东西有关,总是那么朦朦胧胧。

唠叨了很多,还望指教,咱就聊聊。


[解决办法]
引用:
能解释下console子系统和Windows API的联系,还有main和WinMain?

还有可能运行时不显示那个console窗口?(当然现在显示是很正常的,因为首先它是个console应用,然后新开了线程创建窗口)

有无可能用WinMain开始,但是又带个console窗口?


尝试解释一下,说错请纠正哈:
1、console和win32是两个不同的子系统,风格不太一样,运行机制也不一样。console是win32下模拟以前的dos窗口而已。win32是基于消息机制运行的。
2、你帖出来的代码,是没办法去掉console窗口的。
3、从winmain开始,又带console的话,那么你的程序就是纯win32程序了。最简单的办法是用ShellExecute("cmd"),也可以用AllocConsole函数。操作console窗口也是可以的,你搜一下吧。
[解决办法]
你可以创建一个WIN32应用程序,在连接器设置中把子系统改成控制台,再把_tWinMain的定义改成int _tmain(int argc, _TCHAR* argv[]),在此基础上修改代码试试看,当然如果处理多字节的话,没有t之类的东东。

[解决办法]
真的有点受宠若惊,昨天的回答并没有针对个人的,我的意思是在Win32 Console Application条件下也可以使用Windows API创建窗体程序,所以不要太针对出处。
下面仅是我的理解,有可能是错误的,仅供讨论!
1、Win32 Console Application和Win32 Application都是Windows 32位平台程序。Win32 Application是标准windows程序,基于消息机制的,完全拥有windows的特性!Win32 console application 类似于DOS程序(因为传统DOS是16位),但也可以访问windows系统API! 关键在于,一个的入口点WinMain,而另一个是main()。编译时,编译器总是寻找相应的函数来链接。具体如何判断其实我也并没有深入研究过,所以这一点我也不是很清楚。

2、但是,我在网上曾看到又问分析过这个问题,他说:1)EXE文件本身有区别:在文件头里(PE头)有一个标记表明该文件是Application还是Console。2)OS在创建对应的进程时,如果是Console,除了载入文件映像并开启进程外(这一点和Application相同),同时创建一个Console对象(就是那个黑黑的窗口)与之关联,而且这种关联是可以编程脱开的。从这个观点来看,在Win 32Application中即以WinMain为入口函数时,是不会产生控制台窗口即所谓的Console窗口。

3、Windows API和前两者应该是不具比较特征的吧,Windows API是Windows平台下的接口函数,而前两者是平台上的不同应用类型。但是二者都可以使用这种接口。

热点排行