Windows应用程序能调用C runtime函数吗?
不是 Win32 Console application 而是 Win32 application 类型的 Windows应用程序能调用C runtime函数吗?
[解决办法]
能,但c库很多不是线程安全的,另外,界面类的函数基本上没用
[解决办法]
当然是跟GUI相关的API
[解决办法]
以main为入口,可调用C runtime函数和与GUI无关的Win32 API函数
人家没说错啊,又没说不能调用与GUI有关的API。
[解决办法]
不要太纠结了。只要是程序,就可以调用所有的API。
Windows程序 Console 都可以;
GUI API / 非GUI API 都可以。
[解决办法]
但我们习惯于编写console程序实现无窗口的程序功能;
习惯于编写Windows程序实现有窗口的程序功能。
[解决办法]
Console程序和Windows程序确实在GUI的支持上不同的,
入口函数不同main()和WinMain(),前者基于控制台,后者基于主窗口。
“基于”的含义表现在Console程序本身必定运行在控制台上,而Widnows程序通常运行在桌面,而不是基于控制台,哪怕把main函数中的功能实现一遍,也不会工作在控制台上,我们将它叫做桌面应用程序。
正常情况下,WinMain()初始化程序会创建一个主窗口,并实现一个消息循环用来接收和分发消息。
而GUI支持最主要表现在窗口(包括Windows控件也是窗口)和GDI图形功能上,通常通过消息机制工作。
而Win32的MessageBox()和其他Wnd函数比较起来,特殊了一点,系统级别的。无论在Windows程序、Console程序,还是后台服务程序都会在桌面系统中显示,差别只是父窗口不同。
所以不必纠结与这一点,也不必纠结于Console程序中使用Wnd和Gdi函数能够编译运行成功,只要搞清楚它们工作机制不同,用户接口不同就行了。
[解决办法]
Windows程序也可以打开自己的控制台。
做过一个工程 link选项是 /subsystem:windows
在一个参数控制下,这个exe调用AllocConsole()打开一个控制台,与用户进行交互。
[解决办法]
VC6时代 C运行库有 单线程版和多线程版
以后的版本都取消了单线程版本,所以都是线程安全的。
[解决办法]
控制台和win32唯一的区别是,控制台程序运行的时候产生了控制台,并初始化输入输出流。