注意:我们创建的是桌面应用程序
1.WinMain
int WINAPI wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PWSTR pCmdLine,
int nCmdShow);
解释参数:
<1>hInstance:
在win32中h开头的通常都是句柄,我们知道各种各样的句柄
HANDLE:指向一个内核模块的句柄
HWND:指向一个窗口的句柄
HDC:指向设备上下文的句柄
今天我们学的HINSTANCE:指向一个模块的句柄
大家在看到句柄的时候应该记住:
1.真正的对象在内核层,句柄只是个索引
2.句柄都是个DWORD(四个字节)储存一个索引
<2>hPrevInstance:它用于16位Windows,但现在始终为零。(填空就行)
<3>pCmdLine;nCmdShow:这两个放一起说
之前我们学习过创建进程的函数
BOOL CreateProcessA(
[in, optional] LPCSTR lpApplicationName,
[in, out, optional] LPSTR lpCommandLine,//我们知道进程都是由另一个进程创建的当A进程创建B进程时,通过A进程中的这个参数,把这个值传递给B进程入口函数(WinMain)的pCmdLine中
........
[in] LPSTARTUPINFOA lpStartupInfo,//创建你创建的进程由什么方式显现出来是最大化啊,还是最小化啊等等,这会传递给nCmdShow
........
);
2.调试信息的输出:
我们不能想用控制台程序直接用printf,我们可以用OutputDebugString(szOutBuff)不过它只能打印固定的字符串(szOutBuff).所以我们定义一个即可
代码如下
#include "framework.h"
#include "WindowsProject1.h"
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
char szOutBuff[0x80];
DWORD dwAddr = (DWORD)hInstance;
sprintf(szOutBuff, "模块路径: %x", dwAddr);
OutputDebugStringA(szOutBuff);
return 0;
}
我们用debugview++查看输出