C++ 尝试使用Windows/C+;读取注册表值时出现奇怪错误+;

C++ 尝试使用Windows/C+;读取注册表值时出现奇怪错误+;,c++,windows,registry,C++,Windows,Registry,我试图阅读应用程序的安装路径,但我对自己的行为感到困惑。首先,这里是不起作用的代码(格式化了一点,这样就不会占用太多的行): 我意识到它在调用RegQueryValueEx时失败,因此我决定通过在异常中抛出返回值来探测返回值,方法是添加: else { throw Exception( status ); } 但是。。。代码开始工作,对RegQueryValueEx的调用成功。只要我在else中抛出一些东西,我就能够重复这种行为。如果我注释掉else的主体,则返回错误 Edit:好的,

我试图阅读应用程序的安装路径,但我对自己的行为感到困惑。首先,这里是不起作用的代码(格式化了一点,这样就不会占用太多的行):

我意识到它在调用
RegQueryValueEx
时失败,因此我决定通过在异常中抛出返回值来探测返回值,方法是添加:

else {
    throw Exception( status );
}
但是。。。代码开始工作,对
RegQueryValueEx
的调用成功。只要我在
else
中抛出一些东西,我就能够重复这种行为。如果我注释掉else的主体,则返回错误

Edit:好的,我尝试调用
MessageBox
而不是异常,得到了相同的行为。如果我把它注释掉,它就会再次停止工作


对此有合理的解释吗?

regSize
中包含的值相比,
installPath
的缓冲区可能太小(必须初始化为缓冲区的大小)


如果
installPath
是堆栈分配的值,我怀疑它溢出了,导致
status
的值被覆盖。

您能提供一些更多的信息吗,比如所有变量的声明(或者最好是调用它的整个函数)?我可以想象这是一种堆栈溢出问题,症状根据编译器根据函数的其余部分决定如何布局堆栈而有所不同。我意识到可能发生了这种情况,我回到这里,你证实了这一点(奇怪的是,我的问题总是这样)。当我最终让它“正常”运行并向我显示
RegQueryValueEx
错误时,它是
error\u MORE\u DATA
,因此可能发生的情况是,由于缓冲区太小,具有特定的堆栈布局,这意味着溢出到其他堆栈元素上,但当我改变代码时,他们之间有差距,所以不能这样做。我现在在乌托邦;您可以回复此信息,我将接受。请确保初始化regSize@詹格勒:很高兴我能帮上忙。:)我添加了一个答案。@bdonlan:是的,起初我以为它只是用来返回填写的尺寸,但后来我做了一件不可思议的事:我阅读了MSDN文档,意识到这更有意义!那将是奇迹!谢谢
else {
    throw Exception( status );
}