デバッガーで、動作がおかしい。(EXEではOK)

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: デバッガーで、動作がおかしい。(EXEではOK)

by イグトランス » 2006年5月29日(月) 20:20

これはRegQueryValueExの使い方がおかしいです。
RegQueryValueExの6番目(最後)の引数はヘルプを見ると書いてありますが、DWordへのポインタ型です。

しかもWindows APIはABの文字列型を知らないので正しく扱えません。
予め自分で受け取るのに必要なだけのメモリを用意してやる必要があります。
そのメモリを用意するのはZeroStringであり,どれだけ用意すれば良いかは
RegQueryValueExの5番目の引数をヌルにすれば6番目の引数を通して得られます。

コード: 全て選択

Const ProductIDRegPath = "SOFTWARE\Microsoft\Internet Explorer\Registration"
Const ProductIDRegName = "ProductId"

Dim ProductId As String
Dim BufSize As DWord
Dim hKey As HKEY
If RegOpenKeyEx(HKEY_LOCAL_MACHINE As HKEY, ProductIDRegPath, 0, KEY_QUERY_VALUE, hKey) = ERROR_SUCCESS Then
	If RegQueryValueEx(hKey, ProductIDRegName, 0, 0, 0, VarPtr(BufSize)) = ERROR_SUCCESS Then
		ProductId = ZeroString(BufSize)
		If RegQueryValueEx(hKey, ProductIDRegName, 0, 0, StrPtr(ProductId), VarPtr(BufSize)) = ERROR_SUCCESS Then
			MessageBox(0, StrPtr(ProductId), "", MB_OK)
		End If
	End If
	RegCloseKey(hKey) 
End If
たとえばこれならうまく動きます。

デバッガーで、動作がおかしい。(EXEではOK)

by Rapa » 2006年5月29日(月) 18:05

下記をコンパイルし実行すると、警告はでますが正常に値を取得します。

MainWnd.sbp(33) - [警告] "RegOpenKeyEx"の第1パラメータが、DWordからHKEYに強制変換されています。
MainWnd.sbp(34) - [警告] "RegQueryValueEx"の第6パラメータが、*Byteから*DWordに強制変換されています。 しかし、デバッガーで実行させようよすると、string.sdpの51行目でひっかかってしまいます。
動作している様なのでブレークしていいなし、実行もしていない良く分からない状態。 RegQueryValueExの第6パラメータが影響している様なのですが、AB4.24のBugでしょうか?

また、どうすれば直りますか??

ページトップ