已经折腾了三天了!使用HOOK时,想给委托创建一个句柄
下,我使用hook截获系统键盘消息,回调函数时出错“对“T2!T2.Module1+HOOKPROC::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。”,我怎么做才能“让这些委托保持活动状态”呢?我的委托相关代码是:
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Integer, ByVal lpfn As HOOKPROC, _
ByVal hmod As Integer, ByVal dwThreadId As Integer) As Integer
。。。。。。
Delegate Function HOOKPROC(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
。。。。。。
hnexthookproc = SetWindowsHookEx(HookType.WH_KEYBOARD, AddressOf MyKeyboardProc, 0, GetCurrentThreadId())
VBNET中怎么写代码对这个委托创建一个句柄而不被回收呢?
另外,窗体中如果去掉自定义的控件,好像就没有上述错误,这是什么道理啊??
请高手帮忙搞定
[[it] 本帖最后由 jshzp 于 2008-8-16 20:10 编辑 [/it]]