DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Integerの値をDelegateに変換について

環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 1.1]
分類:[.NET]

環境/言語:[WinXP,.NET Framework 1.1] 
分類:[.NET] 


VB6.0から.NETへの移行を行っています。
そこで、(エラー個所の抜粋します)


Delegate Function SubClassProcDelegate(ByVal hwnd As Integer, ByVal msg As Integer,_
ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Declare Function SetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA" (ByVal hwnd As IntPtr,_
ByVal attr As Integer, ByVal lVal As SubClassProcDelegate) As Integer

Public Hook_H As IntPtr
Public Const GWL_WNDPROC As Integer = -4
Public lpPrevWndProc As Integer

Public Sub Unhook_m()
Dim lTemp As Integer
lTemp = SetWindowLong(Hook_H, GWL_WNDPROC, lpPrevWndProc)
End Sub


というようなことをしたいのですが、
lpPrevWndProcのところで
型Integerの値をSubClassProcDelegateに変換できません
とエラーになってしまいます。

Public lpPrevWndProc As Integer部分について
他の個所でも使用しているので、
できればこのまま変更ないようにしたいのですが・・・


解決方法のご教授よろしくお願いします。
.NET 1.1 のころのことは随分記憶があいまいですが、関数ポインタをデリゲートに変換することは不可能だったはずです。
SetWindowLong の Declare をもう一つ書いて、そちらの方の第三引数を Integer(より相応しいのは IntPtr ですが)で宣言するのはどうでしょうか。

サブクラス化なら派生させて WndProc をオーバーライドさせた方が楽ですけどねー。
Hongliangさん
はじめまして。
早々の返信に感謝いたします☆

> .NET 1.1 のころのことは随分記憶があいまいですが、関数ポインタをデリゲートに変換することは不可能だったはずです。
> SetWindowLong の Declare をもう一つ書いて、そちらの方の第三引数を Integer(より相応しいのは IntPtr ですが)で宣言するのはどうでしょうか。

の方法を試してみたところ、行けそうな感じです。
追加したDeclareの第三引数はIntegerとしました。

Declare Function SetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA" (ByVal hwnd As IntPtr,_
ByVal attr As Integer, ByVal lVal As Integer) As Integer

> サブクラス化なら派生させて WndProc をオーバーライドさせた方が楽ですけどねー。

こちらの方法で出来ればとも思ったのですが、
未熟者なのでやり方がわかりません(泣)
よろしければ、サンプルなど教えていただけると幸いですm(_ _)m
> こちらの方法で出来ればとも思ったのですが、
> 未熟者なのでやり方がわかりません(泣)
> よろしければ、サンプルなど教えていただけると幸いですm(_ _)m

キーワードとなる単語はもう挙げてるので、それらを使って google なり yahoo なりで検索してください。
Hongliangさん

>>こちらの方法で出来ればとも思ったのですが、
>>未熟者なのでやり方がわかりません(泣)
>>よろしければ、サンプルなど教えていただけると幸いですm(_ _)m
>
> キーワードとなる単語はもう挙げてるので、それらを使って google なり yahoo なりで検索してください。

調べて勉強します。


ご教授賜りありがとうございました。
当初の目的は達成できましたので、解決とさせていただきます。
またの機会もよろしくお願い申し上げますm(_ _)m
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板