我正在尝试处理在将新项添加到VB.net vsto加载项中的SentItems文件夹时触发的ItemAdd事件。当我尝试这个时:
Private WithEvents mySentItems As Outlook.Items
mySentItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items
我在第二行遇到Declaration Expected错误,我觉得这很奇怪,因为我认为我只是声明了它。
如果我这样做:
Private WithEvents mySentItems As Outlook.Items = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items
加载项编译但是后来看起来非常生气,在抛出此异常后甚至不会加载加载:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. --->
System.NullReferenceException: Object reference not set to an instance of an object.
我在声明任何类subs之前的ThisAddin类声明之后正在完成所有这些操作。
感谢您提供的任何帮助。
答案 0 :(得分:0)
似乎你不能在子或函数之外进行赋值。我移动了线
mySentItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items
到ThisAddin_Startup子,它按预期工作。
如果你这样做的话,感谢您对此进行调查,老实说,我不这样做只是发布我自己的答案,在最终提出问题之前的一天,我没有设法解决这个问题。
答案 1 :(得分:0)
在初始化所有Outlook对象后,您可以在代码中使用以下声明,看起来像属性或方法返回null(在VB.NET中没有任何内容):
Private WithEvents mySentItems As Outlook.Items = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items
另一方面是在单行代码中使用多个点。在断开链并在单行代码上声明每个属性和方法之前,很难理解什么属性或方法准确触发异常。
此外,您不会立即释放基础COM对象。完成使用后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject释放Outlook对象。然后在Visual Basic中将变量设置为Nothing(C#中为null)以释放对该对象的引用。请在Systematically Releasing Objects文章中详细了解相关内容。