当链接器正确选择了C/C++运行库启动函数后,链接器会根据指定的链接器开关,寻找相应的入口点函数,否则会返回
"unresolved external symbol"(无法解析的外部符号)错误。 不然一般会根据情况分别选择 嵌入可执行文件的启动函数。
当然我们也可以从自己的项目中移除/SUBSYSTEM链接器开关,让程序自动判断应该使用哪个子系统。
去启动入口点函数 (WinMain, wWinMain, main, or wmain) 。
VisualC++有自带C运行库的源码。可以在ertex.c文件中找到 这4个启动入口点函数源代码。这些启动函数的用途下面简单说下:
1.获取指向心进程的完整命令行的一个指针。
2.获取指向新进程的坏境变量的一个指针。
3.初始化C/C++运行库的全局变量。如果包含了StdLib.h,我们的代码就可以访问这些变量。
4.初始化C运行库内存分配函数malloc和calloc和其他底层I/O历程使用的堆。
5.调用所有全局和静态C++类对象的构造函数。
变量名称
类型
描述和推荐使用的Windws函数
_osver
unsigned int
操作系统构建的版本号, 如Windows Vista RTM was build 6000. 所以, _osver 的值就是6000. 请换用 GetVersionEx.
_winmajor
unsigned int
以十六进制表示的Windows系统的主版本. 对于Windows Vista,该值为6. 请换用GetVersionEx.
_winminor
unsigned int
以十六进制表示的Windows系统的主版本. 对于Windows Vista,该值为0. 请换用GetVersionEx.
_winver
unsigned int
(_winmajor << 8) + _winminor. 请换用GetVersionEx.
__argc
unsigned int
命令行上传递的参数个数. 请换用 GetCommandLine .
__argv
__wargv
char
wchar_t
长度为 __argc 的一个数组 ,其中含有指向 ANSI/Unicode 字符串指针.
数组中的每一项都指向一个命令行参数. 注意,如果定义了_UNICODE,__argv 就为 NULL如果没有定义__wargv 为 NULL 请换用 GetCommandLine.
_environ
_wenviron
char
wchar_t
一个指针数组,这些指针指向ANSI/Unicode字符串. 数组中的每一项都指向一个环境字符串. 注意,如果没定义_UNICODE ,_wenviron 就为 NULL如果已经定义了_UNICODE, _environ is NULL。请换用GetEnvironmentStrings 或 GetEnvironmentVariable
_pgmptr
_wpgmptr
char
wchar_t
正在运行的程序的名称及其ANSI/Unicode完整路径.
注意,如果已经定义了 _UNICODE ,_pgmptr is NULL如果没有定义——UNICODE,_wpgmptr is NULL 请换用GetModuleFileName, 将 NULL 作为第一个参数传给该函数。
9 7 3 1 2 3 4 8 :
本文来源:不详 作者:佚名