Windows桌面程序
通过空项目创建
-
WINAPI
,一个调用约定宏 -
TEXT
是,Windows SDK
中的兼容字符集宏,等价于_T(xxx)
宏。 -
WinMain
是窗口程序的入口函数,等价于C标准中的int main()
函数。
WinMain
的函数签名
__stdcall
调用约定,被调用者清理堆栈、参数入栈顺序从右至左。WinMain
函数名,Win32
窗口程序调用规范定义。HINSTANCE
,Handel Instance
句柄实例,窗口句柄对象。hInstance
是 实例的句柄*或模块的句柄。 当可执行文件加载到内存中时,操作系统使用此值来标识可执行文件或 EXE。 某些 Windows 函数需要实例句柄,例如加载图标或位图。- 在程序中,关闭随机基址后,
hInstance
的值,统一为0x00400000
,表示程序内存的首地址。
- 在程序中,关闭随机基址后,
hPrevInstance
没有任何意义。 它在 16 位 Windows 中使用,但现在始终为零。pCmdLine
以 Unicode 字符串的形式包含命令行参数。nCmdShow
是一个标志,指示主应用程序窗口是最小化、最大化还是正常显示。
关于pCmdLine
参数
通过配置调试环境中的参数,可以观察到参数字符串是如何存在的。
关于nCmdShow
参数
根据Stack OverFlow
中的回答:
The value of the
nCmdShow
parameter will be one of the constants specified inShowWindow
’s API reference. It can be set by another process or system launching your application viaCreateProcess
. TheSTARTUPINFO
struct that can optionally be passed toCreateProcess
contains awShowWindow
member variable that will get passed toWinMain
through thenCmdShow
parameter.nCmdShow
参数的值将是ShowWindow
的 API 参考中指定的常量之一。它可以由通过CreateProcess
启动您的应用程序的另一个进程或系统来设置。可以选择传递给CreateProcess
的STARTUPINFO
结构包含一个wShowWindow
成员变量,该变量将通过nCmdShow
参数。
- 此参数通过
CreateProcess
创建时,进行传参。
作业
不使用头文件,创建弹窗
主要思路是通过,让程序静态加载user32.dll
动态运行库,将MessageBoxW
函数链接到程序中,进行手工调用。类似的方法也可以动态加载DLL
文件,获取函数地址,通过函数指针调用的方式。此处不赘叙。