2013-02-12 43 views
1

您好,我正在创建一个新的Outlook.Application(使用v.14.0.0.0 Office库)并使用C#检索收件箱电子邮件。只有当Outlook未运行,我收到错误创建未设置为对象实例的Outlook应用程序对象引用

“对象引用不设置到对象的实例”的警报(由第一线发生)

。该计划即将开始(甚至没有进入捕捉部分)。

try { 
    Outlook.Application outlookApplication = new Outlook.Application(); 
    Outlook.NameSpace mapiNameSpace = outlookApplication.GetNamespace("MAPI"); 
    Outlook.MAPIFolder folder = mapiNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 

    foreach (Object obj in folder.Items) { 
     if (obj is Outlook.MailItem) { 
      Outlook.MailItem mailItem = (Outlook.MailItem)obj; 
     } 
    } 
} catch (Exception e) { 
    Console.WriteLine("Unfortunately an error occurred"); 
    Console.WriteLine(e.Message); 
} 

有没有解决这个烦人的警报?我可以压制它或解决问题吗?

该警报来自Outlook实例,我可以看到它,因为在导航栏中Outlook实例处于打开状态(小警报对话框)。

+0

“文件夹”对象是否有_items_?看起来你创建了一个对象,但不是初始化它。你是否一行一行地调试你的代码? – 2013-02-12 10:03:38

+0

是文件夹中有物品,131. – Niklas 2013-02-12 10:04:49

+0

它是什么行崩溃? – 2013-02-12 10:05:05

回答

5

您需要先尝试并获取对正在运行的实例的引用,并且只有在现有实例无法附加到的情况下才创建一个新的(new Outlook.Application())。

This MSDN article说得很清楚。

无耻直接从MSDN文章RIP:

Outlook.Application application = null; 

// Check whether there is an Outlook process running. 
if (Process.GetProcessesByName("OUTLOOK").Count() > 0) 
{ 

    // If so, use the GetActiveObject method to obtain the process and cast it to an Application object. 
    application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application; 
} 
else 
{ 

    // If not, create a new instance of Outlook and log on to the default profile. 
    application = new Outlook.Application(); 
    Outlook.NameSpace nameSpace = application.GetNamespace("MAPI"); 
    nameSpace.Logon("", "", Missing.Value, Missing.Value); 
    nameSpace = null; 
} 
+0

这段代码看起来不错,但它不能解决有关警报对话框的问题。 – Niklas 2013-02-12 10:34:43

+2

这听起来更像是你的Outlook配置有些问题。也许是一个加载项? – Snixtor 2013-02-12 10:40:22

+1

如果我正在执行此代码两次,则出现错误并跳入catch块。 '操作不可用<从HRESULT异常:0x800401E3 >'上如Outlook线 'outlookApplication = Marshal.GetActiveObject( “Outlook.Application”) 。应用程序;' 我必须在程序结束时退出/退出/终止应用程序吗? – Niklas 2013-02-12 10:48:33

0

在我的情况

'对象引用不设置为一个对象的一个​​实例'

消息被抛出Snag-it插件。所以这与核心展望无关。

我禁用了插件,我不再收到此消息。

相关问题