注册 登录
编程论坛 VB.NET论坛

已经折腾了三天了!使用HOOK时,想给委托创建一个句柄

jshzp 发布于 2008-08-16 20:01, 1735 次点击
下,我使用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]]
0 回复
1