Laden...

Verweis führt zu Fehlern weil DLL nicht vohanden sein kann

Erstellt von Chronos vor 14 Jahren Letzter Beitrag vor 14 Jahren 921 Views
C
Chronos Themenstarter:in
132 Beiträge seit 2008
vor 14 Jahren
Verweis führt zu Fehlern weil DLL nicht vohanden sein kann

Guten Morgen,

Ich benötige für mein aktuelles kleines Projekt Hilfe. Ich versuche Daten aus einer Outlookinstanz zu extrahieren. Dies aber auch nur wenn Outlook installiert ist.

Das extrahieren habe ich auch mit Verweisen auf die DLLs von Outlook hinbekommen.
Jedoch bekomme ich bei Anwendungsstart schon eine Exception um die Ohren gehauen wenn lokal kein Outlook installiert ist.

Gibt es da vielleicht eine andere Möglichkeit das zu lösen ?

Ich habe schon selbst einmal nach einer Lösung gesucht ...
btw. die Suche hier im Forum funktioniert bei mir irgendwie nicht.
Bekomme nach Seite 1 immer die Meldung "Die Seite wurde gelöscht ODER der Zugriff auf diese Seite wurde verweigert." Keine Ahnung warum...

Jedenfalls bin ich im Netz auf Reflection gestoßen. Ist dies das Mittel der Wahl oder gibts da noch andere Möglichkeiten.

Wenn Reflection:
Ich habe mir im Netz schon Beispiele angeschaut. Jedoch weis ich nicht so recht wie ich an die bereitgestellten Möglichkeiten von Outlook durch Reflektion kommen kann.

Kann mir vielleicht jemand nen Tipp geben ?

Gruß
Chronos

U
105 Beiträge seit 2004
vor 14 Jahren

Ich empfehle dir Latebinding. Sonst bist du abhängig von einer bestimmten Outlook-Version.

Hier mal ein Beispiel:


object instance = Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application"));

Die Methoden und Funktionen, die Outlook anbietet, kannst du sicher irgendeiner Referenz entnehmen.

Vielleicht hilft dir auch folgende Seite: Using Late Binding If Depending on Multiple Versions of Outlook

Viele Grüße

C
Chronos Themenstarter:in
132 Beiträge seit 2008
vor 14 Jahren

Hi vielen Dank für deine Nachricht.
Also hab jetzt ma was zusammengeschrieben. Das scheint bis hierhin wohl auch irgendwie zu funktionieren. Hier mal der Code:



Type outlookType = Type.GetTypeFromProgID("Outlook.Application");
            object outlookApplication = Activator.CreateInstance(outlookType);

            object outlookNamespace = outlookApplication.GetType().InvokeMember("GetNamespace", BindingFlags.GetProperty, null, outlookApplication, new object[1] { "MAPI" });
            outlookNamespace.GetType().InvokeMember("Logon", BindingFlags.InvokeMethod, null, outlookNamespace, new object[4] { "default", null, true, true });
            object contactFolder = outlookNamespace.GetType().InvokeMember("GetDefaultFolder", BindingFlags.GetProperty, null, outlookNamespace, new object[] { 10 });

            object contactItems = contactFolder.GetType().InvokeMember("Items", System.Reflection.BindingFlags.GetProperty, null, contactFolder, null);
            System.Collections.IEnumerable items = (System.Collections.IEnumerable)contactItems;
            foreach (object cItem in items)
            {
                object EntryID = (string)cItem.GetType().InvokeMember("EntryID", BindingFlags.GetProperty, null, cItem, null);
            }
            Marshal.ReleaseComObject(contactFolder);
            Marshal.ReleaseComObject(outlookNamespace);
            Marshal.ReleaseComObject(outlookApplication);


Was ich mich allerdings frage um weiterzumachen. Was muss ich zum Beispiel beim ersten Parameter in der Methode InvokeMember angeben? Was die angegebenen Parameter angeht so habe ich diese lose im Netzt gefunden. Würde aber schon gerne wissen wollen was für andere Möglichkeiten ich da noch habe. Steht das irgendwo gelistet ?
MSDN habe ich schon nachgeschaut aber irgendwie weis ich auch nicht so recht wonach ich suchen soll.
Habs schon ma mit dem Objectbrowser versucht an diese Infos zu kommen, aber irgendwie werde ich da auch nicht so ganz schlau draus.

Mir geht es hierbei vor allem darum die Nummer, den Namen und das Kontaktbild zu bekommen. Wie gesagt, mit dem Verseis habe ichs bisher hinbekommen jedoch mit eben besagten Problemen aus Post1.

Chronos