tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルEnumWindowsの定義につきまして
記事No12894
投稿日: 2008/08/12(Tue) 18:41
投稿者
WindowsXPSP2 VB6SP6なのですが

Public Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

いろいろ検索すると上記の定義の例がよく出てますが
2番目の引数がByValだとEnumWindowsProcの方で受け取れずエラーとなります。
(デバッグモードでlParamにカーソルをあわせると実行時エラーがでます)
例はlParamは使っていないので動くようですが使う場合は
ByRefにしないとだめでした。

ByRefが正しいということでよいのでしょうか?

よろしくお願いします。

[ツリー表示へ]
タイトルRe: EnumWindowsの定義につきまして
記事No12897
投稿日: 2008/08/12(Tue) 19:57
投稿者花ちゃん
> ByRefが正しいということでよいのでしょうか?

どのような場面でどのように使用するかにもよると思いますので、どちらが正しいと
いうようなものではないかと思うのですが。
http://msdn.microsoft.com/ja-jp/library/cc376250.aspx

データも ByVal lParam As Long のようになっていますが、必ず Long とは限らない
ようです。
ByVal lpEnumFunc As Long, lParam As Any のように宣言して例もあります。

[ツリー表示へ]
タイトルRe: EnumWindowsの定義につきまして
記事No12898
投稿日: 2008/08/12(Tue) 20:00
投稿者魔界の仮面弁士
本来は、ByVal Long で宣言するのが正解です。
ただし、ByRef Long としても間違いではありませんし、
ByVal Class1 などにしても構いません。

もちろん、EnumWindowsProc 側の定義も、それにあわせておく必要がありますけれども。


> (デバッグモードでlParamにカーソルをあわせると実行時エラーがでます)
AddressOf で指定したプロシージャの定義は、どのようになっていますか?

[ツリー表示へ]
タイトル(解決)Re^2: EnumWindowsの定義につきまして
記事No12899
投稿日: 2008/08/13(Wed) 13:34
投稿者
> > (デバッグモードでlParamにカーソルをあわせると実行時エラーがでます)
> AddressOf で指定したプロシージャの定義は、どのようになっていますか?

EnumWindowsProcの方の定義が未記入でデフォルトByRefとなっておりました。
定義と合わせましたところうまくいきました。

お騒がせしました。
いろいろありがとうございました。

[ツリー表示へ]