2

こんにちは私は新しいOutlook.Application(v.14.0.0.0 Officeライブラリを使用)を作成し、C#を使用して受信トレイの電子メールを取得しています。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インスタンスが開いているため(小さなアラートダイアログ)、それを確認できます。

4

2 に答える 2

6

最初に実行中のインスタンスへの参照を取得してnew Outlook.Application()、既存のインスタンスをアタッチできない場合にのみ新しいインスタンス()を作成する必要があります。

このMSDNの記事は、それをかなり明確にしています。

MSDNの記事から直接恥知らずなリッピング:

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;
}
于 2013-02-12T10:30:31.030 に答える
0

私の場合、メッセージ

'オブジェクト参照がオブジェクト インスタンスに設定されていません'

Snag-itプラグインによってスローされました。したがって、これはコアOutlookとは何の関係もありません。

プラグインを無効にしましたが、このメッセージは表示されなくなりました。

于 2013-12-28T13:52:31.387 に答える