我正在開發一個COM DLL庫,並且我有一個小vb.net(vs 2005)應用程序來測試它。TargetInvocationException在處理COM事件時
我在應用程序中聲明我的對象
私人m_VarName作爲MyLib.CMyComClass
到目前爲止,一切都很好。
但現在,我需要一個事件來通知一些事情的應用程序,所以我實現了在COM DLL這樣的事件,並改變了聲明
私人WITHEVENTS m_VarName作爲MyLib.CMyComClass
到目前爲止,再次如此好。但是,如果我添加子來處理我的事件:
私人小組m_VarName_OnCaptureStop()處理m_VarName.MyEvent
...
末次
我第一次創建該對象,沒有什麼不好發生,但如果我重新實例它
如果(不是m_VarName什麼)然後ReleaseComObject的(m_VarName)
m_VarName =新MyLib.CMyComClass
然後我得到一個神祕的TargetInvocationException,看似與反射(其中,據我所知,我沒有使用)。
如果我刪除「處理m_VarName.MyEvent」部分,一切似乎工作。如果重要的話,我現在不會發射任何事件。 有關爲什麼發生這種情況的任何想法?
我認爲有必要調用ReleaseComObject。 我剛剛在MSDN中看到,它僅在需要以特定順序發佈對象的情況下才有。 非常感謝您提供這樣一個詳細的答案,我剛剛測試過它,它的工作原理。 – raven 2010-08-31 16:53:55
+1,表示同意。 ReleaseComObject()是毒藥。相信垃圾收集器。 – 2010-08-31 16:55:14