2013年12月10日火曜日

Windows 8.1 QueryBinaryValueの動作が違うと調べてみれば

C++でプログラムを組んでいます。
プログラムには、QueryBinaryValueメソッドを使って、レジストリを読み出す部分がありました。
Windows8やWindows7では、期待通りに動くのに、8.1では動きませんでした。

最初、OSの32ビットと、64ビットで挙動が異なったため、レジストリの32ビットと64ビットの違いを疑いました。
しかし、これは、主に、レジストリのsoftware関係の場合に影響することから、今回の原因とは異なりました。

原因を探っていくと、Debugモードでビルドしたプログラムは期待通りに動くことがわかりました。

さらに調べると、QueryBinaryValueの引数に、配列のポインタのポインタを渡していることが分かり、これが原因だと分かりました。

C++は、これが怖いです。
void*は、なんでも受け取りますから。


Windows8.1には、メモリリーク対策が施されているのでしょうか。
珍しく、Windowsに感謝しました(笑)

0 件のコメント:

コメントを投稿