VarPtrについて


ららら  2003-12-28 00:26:41  No: 110994

レジストリの値を取得する方法として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)


Say  2003-12-28 15:24:59  No: 110995

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 レジストリ」で検索してみてください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加