c++ windows函数错误显示 getlasterror与formatemessage

#include<iostream>
#include<Windows.h>
#include <limits>
#include<stdio.h>
#include<locale.h>

using namespace std;
/*
HANDLE CreateFile(
LPCTSTR lpFileName,    // 指向文件名的指针
DWORD dwDesiredAccess,    // 访问模式(写 / 读)如果为 GENERIC_READ  GENERIC_WRITE 如果为零,表示只允许获取与一个设备有关的信息
DWORD dwShareMode,    // 共享模式 零表示不共享; FILE_SHARE_READ 和 / 或 FILE_SHARE_WRITE 表示允许对文件进行共享访问
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指向安全属性的指针
DWORD dwCreationDisposition,   // CREATE_NEW  CREATE_ALWAYS OPEN_EXISTING OPEN_ALWAYS TRUNCATE_EXISTING
DWORD dwFlagsAndAttributes,   // 文件属性 FILE_ATTRIBUTE_ARCHIVE  标记归档属性 
                                          FILE_ATTRIBUTE_COMPRESSED  将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式
                                          FILE_ATTRIBUTE_NORMAL 默认属性
                                          FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录 
										  FILE_ATTRIBUTE_READONLY 文件为只读
										  FILE_ATTRIBUTE_SYSTEM 文件为系统文件
										  FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作
										  FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作
										  FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块
                                          FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化
                                          FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化
                                          FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除。特别适合临时文件
HANDLE hTemplateFile    // 用于复制文件句柄 如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性
);


DWORD WINAPI FormatMessage(
         DWORD dwFlags,标志位,决定如何说明lpSource参数 FORMAT_MESSAGE_??
         LPCVOID lpSource,根据dwFlags标志而定。
         DWORD dwMessageId,错误信息的标识符
         DWORD dwLanguageId,请求的语言标识符
         LPTSTR lpBuffer,接受错误信息描述的指针
         DWORD nSize,指定输出缓冲区的大小,为0指定,分配给缓冲区最小数
         va_list* Arguments 保存格式化信息中的插入值的一个数组。
);

*/


void getError()
{
	TCHAR szBuf[128];
	LPVOID lpMsgBuf;
	DWORD dw = GetLastError();

	FormatMessage(
		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
		NULL,
		dw,
		//MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),//使用英文
		MAKELANGID(SUBLANG_NEUTRAL, SUBLANG_DEFAULT),//SUBLANG_DEFAULT使用系统默认的语言 SUBLANG_NEUTRAL 中立的语言
		(LPTSTR)&lpMsgBuf,
		0, NULL);

	wsprintf(szBuf, L"出错码:%d,信息:%s", dw, lpMsgBuf);
	//输出提示。
	wcout.imbue(locale("chs"));//设置本地化
	wcout << szBuf << endl;//宽字符不能用cout 应该用wcout

	setlocale(LOCALE_ALL, "chs");
	wprintf(L"%s", lpMsgBuf);
	//wcout << (WCHAR)lpMsgBuf << endl;

	LocalFree(lpMsgBuf);

}

void main()
{
	HANDLE file;
	file = CreateFile(L"D:\\ffd", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	getError();
	cin.get();
}
上一篇:Windows API 学习


下一篇:C++之NetLocalGroupEnum