ページ 11

RegEnumKeyEx

Posted: 2007年5月26日(土) 09:20
by M.S.
上記のコードを実行すると、

コード: 全て選択

RegEnumKeyEx(hKey,dwIndex1,szObject,VarPtr(dwBufSize),0,0,0,ByVal 0)=ERROR_SUCCESS
でアクセス違反が発生してしまいます。

WinAPI Database for VB Programmer で調べて書いたのですが、
どうも宣言が悪いようなので、どなたか教えてください。

お願いします。

参照: RegEnumKeyEx - WinAPI Database for VB Programmer

元のコード: 「Windows 95 でパフォーマンス レジストリにアクセスする方法」

Posted: 2007年5月26日(土) 12:46
by 7
試してないので解決するか分かりませんが、RegEnumKeyEx()関数の第六引数の型を変更してみてください。
String型からBytePtrやLPSTRに。

http://msdn.microsoft.com/library/ja/de ... mkeyex.asp
このページの引数を参考にした方が良いと思います。

Posted: 2007年5月26日(土) 13:00
by イグトランス
原因は第3引数pNameだと思います。

これはAB5のヘッダからAB4向けに修正したものです。

コード: 全て選択

Declare Function RegEnumKeyEx Lib "advapi32" Alias "RegEnumKeyExA" (
	hKey As HKEY,
	dwIndex As DWord,
	pName As *Byte,
	ByRef cName As DWord,
	pReserved As *DWord,
	pClass As *Byte,
	ByRef cClass As DWord,
	pftLastWriteTime As *FILETIME) As Long
宣言をこちらに書き換えて,RegEnumKeyEx(hKey, dwIndex1, szObject, dwBufSize, 0, 0, 0, 0)とするとアクセス違反を起こさず動くようになりました。

VBの宣言を持ってくるのは楽ですが,AB用に書き換えるときにはよく注意してください。

Posted: 2007年5月26日(土) 15:37
by M.S.
7 さん、イグトランス (egtra) さんありがとうございました。

イグトランスさんのコードで動くようになりました。

>http://msdn.microsoft.com/library/ja/de ... mkeyex.asp
>このページの引数を参考にした方が良いと思います。

MSDN の方がよさそうなので、
次から未定義の宣言を書くときは MSDN を見ることにします。