win32编程详解
表4-1 应用程序的进入点
应用程序类型 | 进入点 | 嵌入可执行文件的启动函数 |
需要ANSI字符和字符串的GUI应用程序 | WinMain | WinMainCRTStartup |
需要Unicode字符和字符串的GUI应用程序 | wWinMainw | WinMainCRTStartup |
需要ANSI字符和字符串的CUI应用程序 | main | mainCRTStartup |
需要Unicode字符和字符串的CUI应用程序 | wmain | wmainCRTStartup |
可以从应用程序中全部删除/ S U B S Y S T E M 链接程序开关。当这样做的时候,链接程序能够自动确定应 用程序应该连接到哪个子系统。当进行链接时,链接程序要查看代码中存在4 个函数(Wi n M a i n 、w Wi n M a i n 、m a i n 或w m a i n ) 中的哪一个。然后确定可执行程序应该是哪一个子系统,并且确定可执行程序中应该嵌入哪个C / C + +启动函数。
程序能够使用的C / C + +运行期全局变量
变量名 | 类型 | 说明 |
_osver | unsigned int | 操作系统的测试版本。例如Windows 2000 Beta 3是测试版本2031 。因此_osver的值是2031 |
_winmajor | unsigned int | 采用十六进制表示法的Windows主要版本。对于Windows2000来说,它的值是5 |
_winminor | unsigned int | 采用十六进制表示法的Windows次要版本。对于Windows2000来说,它的值是0 |
_winver | unsigned int | ( _winmajor < < 8 ) + _ winminor在命令行上传递的参数号 |
__argc | unsigned int | 带有指向ANSI/Unicode字符串的指针的__argc大小的数组 |
__argv | char * * | 带有指向ANSI/Unicode字符串的指针的__argc大小的数组 |
__wargv | wchar_t * * | 每个数组项均指向一个命令行参数 |
_environ | char * * | 指向ANSI/Unicode字符串的指针的数组。每个数组项指向一个环境字符串 |
_wenviron | wchar_t * * | 指向ANSI/Unicode字符串的指针的数组。每个数组项指向一个环境字符串 |
_pgmptr | char * | 正在运行的程序的ANSI/Unicode全路径和名字 |
_wpgmptr | wchar_t * | 正在运行的程序的ANSI/Unicode全路径和名字 |
可执行文件的映像加载到的基地址是由链接程序决定的。不同的链接程序可以使用不同的默认基地址。Visual C++链接程序使用的默认基地址是0 x 0 0 4 0 0 0 0 0 ,因为这是在运行Wi n d o w s9 8 时可执行文件的映象可以加载到的最低地址。可以改变应用程序加载到的基地址,方法是使用M i c r o s o f t 的链接程序中的/ B A S E : a d d r e s s 链接程序开关。