2011-05-01 99 views
0

我写了一些基本代码来从注册表中读取RegGetValue,它在调试模式下工作正常。但是,在发布模式下,它无法读取注册表值。没有任何错误,它只是不起作用。我能做些什么来使这个功能在发布模式下工作? (Windows 7 x64,VS 2008)vs2008中Debug Debug模式的帮助

DWORD sz, regval=0; 
RegCreateKeyEx(
    HKEY_CURRENT_USER, 
    _T("Software\\App"), 
    0, 
    NULL, 
    REG_OPTION_NON_VOLATILE, 
    KEY_ALL_ACCESS, 
    NULL, 
    NULL, 
    &sz); 
RegGetValue(
    HKEY_CURRENT_USER, 
    _T("Software\\App"), 
    _T("Value"), 
    RRF_RT_ANY, 
    NULL, 
    &regval, 
    &sz); 
+1

发布您的代码。 – 2011-05-01 20:13:54

+0

DWORD sz,regval = 0; RegCreateKeyEx(HKEY_CURRENT_USER,_T( “软件\\应用程序”),0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,NULL, \t \t RegGetValue(HKEY_CURRENT_USER,_T( “软件\\应用程序”),_ T( “值” ),RRF_RT_ANY,NULL,&REGVAL, – IMGRSHPR 2011-05-01 20:21:47

+0

在你的问题。没有线索如何工作不再是一个合理的借口。 – 2011-05-01 20:49:55

回答

0

定义此代码在调试模式下“工作正常”的方式。

此代码添加一个键,然后读取它下面的值,但没有添加值的代码。

如果这是完整的代码,那么在尝试读取它之前,您需要添加一个名为“Value”的值。请参阅RegSetValueEx了解如何操作。

看起来上面的代码不会正确地检索该值,因为必须在输入上设置sz以指示缓冲区有多大。很难说没有完整的代码,但因为这个值是REG_DWORD,这将是sz = sizeof(DWORD);,例如。

+0

好吧,对我的问题的一些澄清我使用RegQueryValueEx来读取现有的注册表项(REG_DWORD)该函数返回成功,但是缓冲区(LPBYTE lpData)不包含任何数据。此外,包含数据缓冲区值大小(LPDWORD lpcbData)的输出缓冲区确实给了我数据的大小,这个问题只在释放模式下,在调试时,它正确地返回缓冲区数据。 – IMGRSHPR 2011-05-02 21:11:19

+0

上面的代码将无法正确检索因为必须在输入上设置“sz”来指示缓冲区有多大。很难说没有完整的代码,但由于这个值是REG_DWORD,这将是'sz = sizeof(DWORD);',例如。 – 2011-05-02 22:15:50

+0

Thanx!这是问题所在。 sz未初始化,刚创建。我认为它在调试模式下工作的原因是因为当创建一个变量(DWORD sz)时,它填充了一个值(而不是0),所以RegQueryValueEx使用sz的默认值。 – IMGRSHPR 2011-05-02 22:29:19