2014-07-22 1 views
0

Может ли кто-то помочь мне, поскольку я становлюсь ниже исключения, когда я бросаю объект itemA в Notesitem в цикл foreach.Получение исключения при извлечении Вложение из файла Lotus Notes (.nsf) через код C#

Unable to cast COM object of type 'System.__ComObject' to interface type 'Domino.NotesItem'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{2913158A-2EED-1069-BF5D-00DD011186B7}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)). at WindowsApplication2.Form1.btnSearch_Click(Object sender, EventArgs e) in C:\WindowsApplication2\WindowsApplication2\Form1.cs:line 319}

Я использую Interop.Domino.dll с кодом:

 NotesSession session = new NotesSession(); 
     session.Initialize("XXXXXX"); 
     try 
     { 
      NotesDatabase NotesDb = session.GetDatabase("", "C:\LotusFiles\\XYZ.nsf", false); 

      if (NotesDb == null) 
      { 
       //System.Console.WriteLine("Can not connect to server."); 
      } 
      else 
      { 
       //System.Console.WriteLine("Connected"); 
      } 

      Domino.NotesDocumentCollection col = NotesDb.AllDocuments; 
      for (int i = 0; i < col.Count; ++i) 
      { 
       Domino.NotesDocument doc = col.GetNthDocument(i); 

       if (doc.HasEmbedded) 
       { 
        object[] itemsA = (object[])doc.Items; 
        foreach (NotesItem item in itemsA) 
        { 
         if (item.Name.Equals("$FILE")) 
         { 
          object[] values = (object[])item.Values; 
          //doc.GetAttachment(values[0].ToString()).ExtractFile(fileSavePath + values[0].ToString()); 
         } 
        } 
       } 



      } 
+0

Это довольно просто, не так ли? Похоже, что 'doc.Items' не возвращает' NoteItem''. Это так, вы можете найти документацию для 'NotesDocument.Item'? Если это не так, какова остальная часть ошибки, которую вы усекали: «не удалось из-за fo ...»? – Rup

+1

Я использовал программирование Notes API еще 20 лет назад. Я не знаком с текущим C# API, но причина, по которой вы получаете это сообщение, состоит в том, что объекты в массиве 'itemsA' не реализуют интерфейс NotesItem. Честно говоря, я не знаю, какой у них тип. Поместите точку останова на строку 'foreach' и проверьте элементы в возвращаемом массиве. –

+0

На самом деле Interop.Domino.dll является комком, и я пробовал все, как regasm.exe, чтобы заставить его работать – tinks

ответ

1

получил его решить phewwwwwwww ... Interop.Domino.dll был коррумпирован в моем случае, все люди сталкиваются этот вопрос, пожалуйста, не загружайте Interop.Domino.dll из Интернета, а отправляйтесь в Refrence -> Add Refrence -> COM -> Найдите объекты Lotus Domino и Bingo !!!

Смежные вопросы