什么是SDK

控制台程序(Console User interface)CUI
对于控制台程序,通用,也就是平台无关

图形界面系统

可是如果你想要播放一个音乐,C语言有嘛?

所以需要平台开发,不可以移植性

平台会提供函数,操作系统提供给软件的功能,而且提供的函数往往是超过库的

特别是游戏,openg l(游戏图形等标准化)dx

我们一般把系统给操作者的函数,叫API

API(头文件、库)

所以SDK(Software Development Kit)软件开发工具包, 把头文件、库等打包

比如你要写个windows的应用程序,第一步你得去下载SDK

现在得SDK现在集成在了VS

SDK(1.1note)-LMLPHP

不同SDK的有什么差异?
如果你需要新的功能,所以更新添加,或者修改,修复bug

SDK(1.1note)-LMLPHP
windows的sdk发一般都是在C盘下
SDK(1.1note)-LMLPHP

https://learn.microsoft.com/zh-cn/windows/apps/
SDK(1.1note)-LMLPHPhttps://learn.microsoft.com/zh-cn/visualstudio/windows/?view=vs-2022
SDK(1.1note)-LMLPHP
SDK(1.1note)-LMLPHP
当然sdk还有离线的文档,这里我没去找了

SDK(1.1note)-LMLPHP
从操作系统的底层来说,都是用了W的版本

SDK(1.1note)-LMLPHP在上图我们windows所有类型都被定义了,而且看到大多都是大写

简单来说,就是方便大家更新,也防止因为类型导致的程序报错

对于类型问题,同时也要少写对地址进行位移运算

#include <windows.h>
#include<tchar.h>
#include <stdio.h>
#include <strsafe.h>


int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	TCHAR* lpCmdline, //命令行参数,LPSTR可能会变成Unicode
	int nCmdShow) {
	/*MessageBoxA(NULL, "hell word ", "asm", MB_YESNO);*/\
	int res = MessageBoxW(NULL, L"hell unicode", L"asm", MB_YESNO);
	DWORD error= GetLastError();//最后一次的错误码
	LPVOID lpMsgBuf;
	if (error != ERROR_SUCCESS) {
	/*	MessageBoxW(NULL, L"错误", L"asm", MB_OK);*/
		FormatMessage(
			FORMAT_MESSAGE_ALLOCATE_BUFFER |/*  分别为FORMAT_MESSAGE_ALLOCATE_BUFFER由函数分配输出缓冲区,
FORMAT_MESSAGE_FROM_SYSTEM表示程序将会在系统消息表资源中搜索所需消息,

FORMAT_MESSAGE_IGNORE_INSERTS程序将会忽略搜索到消息中的插入序列。  */
			FORMAT_MESSAGE_FROM_SYSTEM |
			FORMAT_MESSAGE_IGNORE_INSERTS,
			NULL,
			error,
			MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
			(LPTSTR)&lpMsgBuf,
			0, NULL);
		MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK|MB_ICONINFORMATION);

		LocalFree(lpMsgBuf);
		ExitProcess(error);
		return 0;

	}
	
	return 0;
}
10-02 07:51