レジストリの値を取得する方法としてSampleプログラムで以下のものを使用していますが、第5引数のVarPtrの使い方が理解できません。
VarPtr関数は変数のアドレスを返すというのはわかるのですが、ここでの使い方がいまいち納得できません。また第5引数には取得結果のレジストリ値が入るのではないのでしょうか?
また、なぜここだけByval指定してあるのでしょうか?
わかる方がおりましたらご教授願えないでしょうか?
よろしくお願い致します。
Dim bytData(REGSTR_MAX_VALUE_LENGTH - 1) As Byte
・
・
・
・
'レジストリ情報の検索
lngErrorCode = SHGetValue(strRootKey, _
strSubKey, _
strSearchString, _
lngType, _
ByVal VarPtr(bytData(0)), _
lngLength)
SHGetValueの第5引数はDataBufferの先頭アドレスです。
Bufferを配列で用意した場合、先頭は第0要素、
即ちbytData(0)ですから、そのアドレスは
VarPtr(bitData(0))になります。
VarPtrの戻り値は変数のアドレスを示すLong型の「値」ですから
値渡し、即ちByValで渡します。
ByRefだと、VarPtr関数の戻り値を収めた一時変数の
アドレスを渡すことになり、意味不明になります。
ちなみに、レジストリ関連でしたら
へろぱのページにもう少し普通のサンプルがあります。
http://plaza5.mbn.or.jp/~heropa/vb123.htm
また、単にレジストリの操作が目的なら、
WshShellを使ったほうが簡単です。
「WshShell レジストリ」で検索してみてください。
ツイート | ![]() |