【问题标题】:Help with Debug Release mode in vs2008vs2008中调试发布模式的帮助
【发布时间】:2011-05-03 06:35:31
【问题描述】:

我编写了一些基本代码以使用RegGetValue 从注册表中读取,这在调试模式下运行良好。但是在发布模式下,它无法读取注册表值。没有任何错误,它只是不起作用。我该怎么做才能使此功能在发布模式下工作? (Windows 7 x64,VS 2008)

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);

【问题讨论】:

  • 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);
  • 在您的问题中。不知道 SO 是如何工作的不再是一个合理的借口。

标签: visual-studio-2008 visual-c++


【解决方案1】:

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

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

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

上面的代码似乎无法正确检索该值,因为必须在输入上设置sz 以指示可用缓冲区的大小。没有完整的代码很难说,但是因为这个值是REG_DWORD,所以例如sz = sizeof(DWORD);

【讨论】:

  • 好的,关于我的问题的一些澄清。我正在使用 RegQueryValueEx 读取现有的注册表项(REG_DWORD)该函数返回成功,但是缓冲区(LPBYTE lpData)不包含数据。此外,包含数据缓冲区值大小的输出缓冲区(LPDWORD lpcbData)确实给了我数据的大小。这个问题只在release模式下,在debug中,正常返回buffer数据。
  • 上面的代码将无法正确检索该值,因为必须在输入上设置sz 以指示可用缓冲区的大小。没有完整的代码很难说,但因为这个值是 REG_DWORD 这将是sz = sizeof(DWORD);,例如。
  • 谢谢!这就是问题所在。 sz 未初始化,刚刚创建。我认为它在调试模式下工作的原因是因为在创建变量(DWORD sz)时它填充了一个值(而不是 0),所以 RegQueryValueEx 使用的是默认值 sz。
  • 很高兴这有帮助。我会将其添加到答案中,而不是作为评论。
猜你喜欢
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2021-02-08
  • 1970-01-01
  • 2011-03-18
相关资源
最近更新 更多