RegEnumKeyEx

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

RegEnumKeyEx

#1 投稿記事 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 でパフォーマンス レジストリにアクセスする方法」
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#2 投稿記事 by 7 »

試してないので解決するか分かりませんが、RegEnumKeyEx()関数の第六引数の型を変更してみてください。
String型からBytePtrやLPSTRに。

http://msdn.microsoft.com/library/ja/de ... mkeyex.asp
このページの引数を参考にした方が良いと思います。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 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用に書き換えるときにはよく注意してください。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

#4 投稿記事 by M.S. »

7 さん、イグトランス (egtra) さんありがとうございました。

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

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

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