RegQueryValueEx问题

时间:2012-03-31 16:20:23

标签: c++

我正在使用RegQueryValueEx从注册表中读取字符串值(REG_SZ)。 如果此注册表包含一些日语字符和英语,则该值 例如:C:\ Program Files \ MyReg \チチチ\ helloworld

我正在使用以下代码段:

BYTE* dwValue = 0;
DWORD  dwSize = 0;
DWORD dwType = SZ_REG;
TCHAR* valueName= TEXT("test");
//Get the size 
if(RegQueryValueEx(hKey, valueName,NULL,&dwType,NULL,&dwSize) == ERROR_SUCCESS)
{   
dwValue = new BYTE[dwSize];

if(RegQueryValueEx(hKey, valueName,NULL,&dwType,( BYTE* )( dwValue ),&dwSize) == ERROR_SUCCESS ) )
   _tprintf(TEXT("The value is  %s"),(TCHAR*)dwValue);
}  

我得到的输出是 -

值为C:\ Program Files \ MyReg \

这个exe是控制台应用程序,并且已经定义了UNICODE预处理器。 如果我删除它然后它正常工作并提供正确的字符串。 由于UNICODE,我不确定是否会出错。

-Thanks

1 个答案:

答案 0 :(得分:0)

这就解决了我的问题,但它仍然让我感到困惑。

我的项目基于VS IDE 2003,如果我使用UNICODE / _UNICODE在VS 2003中编译相同的代码,它将无法给我完整的字符串含义(它将删除从第一个双字节字符开始的字符) 。
如果我使用VS IDE 2003构建没有_UNICODE / UNICODE标志,它工作正常并给我完整的字符串然后根据我的代码页我可能会看到每个字符的实际字符或一串问号(???)双字节字符。

如果我使用VS 2005编译相同的代码,那么无论我是否定义了_UNICODE / UNICODE,我都会得到正确完整的字符串(来自注册表)。 但是当字符无法在日语操作系统控制台以及英语操作系统控制台上显示时。但MessageBox()正确显示它们。 为了在日语操作系统控制台上正确显示字符,我不得不在没有_UNICODE / UNICODE标志的情况下编译。 (我无法理解..) 在我的代码中,除了用VS 2005编译它以解决问题(显示问题除外)之外我没有任何改变