DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,(LPWSTR)szData,-1,NULL,0,NULL,FALSE);
 char *psText;
 psText = new char[dwNum];
 WideCharToMultiByte (CP_OEMCP,NULL,(LPWSTR)szData,-1,psText,dwNum,NULL,FALSE);


 DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, strKeyName.c_str(), -1, NULL, 0);
 wchar_t *pwText = new wchar_t[dwNum];
 MultiByteToWideChar (CP_ACP, 0, strKeyName.c_str(), (int)strKeyName.size()+1, pwText, dwNum);
 CP_OEMCP与CP_ACP有什么区别啊

 网上搜了点解释:
CP_ACP 指示 API 使用当前设置默认的 Windows ANSI 代码页。CP_OEMCP 指示要使用当前设置 API 默认 OEM 代码页。 

当将字符串转换时,如果 Win32 ANSI api 用于从一个 Windows NT 系统中获取文件名,请使用 CP_ACP。Windows NT 检索从物理设备的名称,并将 OEM 名称转换为 Unicode。Unicode 名被转换成 ANSI 如果称为 ANSI API,再转换回 MultiByteToWideChar() 与 Unicode。 

如果正在从 OEM 编码的文件中检索文件名,改用 CP_OEMCP。 
但是不明白啊

WideCharToMultiByte完成后是char *psText;而MultiByteToWideChar完成后是wchar_t ;CP_ACP不是转换成ASCI吗,有点矛盾啊