ahstax
Goto Top

Maitems in List(of T)

Hallo,

Ich würde gerne E-Mails, die in ein OL-Exchange-Postfach eingehen, in einer List(of T) ablegen, um sie dann später daraus zur Weiterbearbeitung zu entnehmen.
Die Variable "lstMailItemsReceivedLive" ist definiert, die Überwachung des Postfachs funktioniert:

Alt 1:
Public lstMailItemsReceivedLive As List(Of Microsoft.Office.Interop.Outlook.Items)

Alt 2:
Public lstMailItemsReceivedLive As List(Of Object)

Public Sub olInboxItems_ItemAdd(ByVal Item As Object) Handles olInboxItems.ItemAdd
   lstMailItemsReceivedLive.Add(Item)
End Sub

Ich erhalte folgende Fehlermeldungen:
Alt 1:
"Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Schnittstellentyp "Microsoft.Office.Interop.Outlook.Items" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{00063041-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE))."

Alt 2:
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Kann mir jemand sagen, was ich wo wie zu ändern habe?

Neugierige Grüße,
Andreas

Content-ID: 223224

Url: https://administrator.de/forum/maitems-in-listof-t-223224.html

Ausgedruckt am: 10.04.2025 um 01:04 Uhr

colinardo
colinardo 29.11.2013 aktualisiert um 11:15:49 Uhr
Goto Top
Hallo Andreas,
das sollte problemlos gehen...
Public lstMailItemsReceivedLive As new List(Of Microsoft.Office.Interop.Outlook.MailItem)
du solltest aber noch zusätzlich prüfen ob das übergebene Objekt im ItemAdd-Event tatsächlich ein MailItem ist indem du die Klasse des Objekts überpüfst.
Public Sub olInboxItems_ItemAdd(ByVal Item As Object) Handles olInboxItems.ItemAdd
  If Item.Class = Microsoft.Office.Interop.Outlook.OlObjectClass.olMail Then
     lstMailItemsReceivedLive.Add(Item)
  End if
End Sub
Wenn das obige bei dir nicht geht, dann hast du anstatt des .NET Assemblies von Outlook, die COM-Variante als Referenz eingebunden.

Grüße Uwe
ahstax
ahstax 29.11.2013 aktualisiert um 11:57:27 Uhr
Goto Top
Hallo Uwe,

in der Tat (Du hast ne Kristall-Kugel...?) ist die COM-Variante eingebunden...
Wo bekomme ich die .NET-Assemblies von Outlook (Office, Word...) her, wenn diese nicht in Verweise --> Hinzufügen --> .NET gelistet sind?

Könnte man das "Problem" auch irgendwie mit der COM-Variante lösen?

Grüße,
Andreas
colinardo
colinardo 29.11.2013 aktualisiert um 12:02:54 Uhr
Goto Top
ahstax
ahstax 29.11.2013 um 12:23:32 Uhr
Goto Top
Kann es sein, dass die DLLs in

Microsoft Visual Studio 2010
Version 10.0.30319.1 RTMRel
Microsoft .NET Framework
Version 4.5.50938 RTMRel

Installierte Version: VB Express

Microsoft Visual Basic 2010 01012-169-2510015-70173
Microsoft Visual Basic 2010

nicht verwendet werden dürfen bzw importiert werden können?
colinardo
colinardo 29.11.2013 um 12:25:12 Uhr
Goto Top
Yip, mit den Express Editionen darfst du keine Office-Anwendungen programmieren...
ahstax
ahstax 29.11.2013 um 12:26:41 Uhr
Goto Top
Ein Ärgernis... face-confused

Komme ich also leider nochmals zurück zu meiner Frage:
Könnte man das "Problem" auch irgendwie mit der COM-Variante lösen?
colinardo
colinardo 29.11.2013 aktualisiert um 12:35:26 Uhr
Goto Top
also bei mir geht's so wie ich es oben beschrieben habe auch mit der COM-Variante (getestet mit Visual Studio 2010 Professional).
Du hast die Listen nicht mit New erzeugt, deshalb bekommst du den Fehler :
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
Und auch die Objekttypen der Liste stimmen nicht.
ahstax
ahstax 29.11.2013 um 12:34:46 Uhr
Goto Top
Schreibe ich dann also einfach statt

Public lstMailItemsReceivedLive As List(Of Microsoft.Office.Interop.Outlook.Items)

Public lstMailItemsReceivedLive As New List(Of Microsoft.Office.Interop.Outlook.Items)
colinardo
colinardo 29.11.2013 aktualisiert um 13:24:25 Uhr
Goto Top
lese doch mal bitte meinen ersten Post richtig:
Public lstMailItemsReceivedLive As new List(Of Microsoft.Office.Interop.Outlook.MailItem)
Das Objekt in der Liste ist immer als Objekt-Typ in der Einzahl zu sehen nicht in der Mehrzahl. Du übergibst ja nicht eine ganze Liste an Mails an die Liste, sondern nur eine Mail auf einmal.
ahstax
ahstax 29.11.2013 um 12:40:27 Uhr
Goto Top
Verzeihung bitte, ich hatte das "Mail"-Item und "New" beim Lesen übersehen.

So funktioniert es!

Danke für Deine Hilfe!