在调试时,产生如下错误:
检测到CallbackOnCollectedDelegate,对“hook!hook.Form1+HookProc::Invoke”类型的已垃圾回收委托进行了回调。
说我的委托已被垃圾回收,请告诉我这怎么解决呢?
3Q!

解决方案 »

  1.   

    传给非托管代码的委托要"保存起来"。CLR管不到非托管代码,因此传到非托管代码的委托,如果没有其他引用,就可能会被垃圾回收。
    当委托被回收后,非托管代码再回调你的委托,就会造成上述的异常。class hook
    {
       private callBackDelegate;       //<---- keep a reference here   void button1_click(...)
       {
          callBackDelegate = new ...;
          SetWindowsHookEx(..., callBackDelegate, .......);
       }
    }
      

  2.   

    to gomoku:请教怎么保存自己的委托啊?用什么方法呢?
      

  3.   

    http://msdn.microsoft.com/en-us/library/43yky316(VS.85).aspx