Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
auf meinem Windows-2000-Rechner funktioniert das aber nicht. In der Zeile "aContactItem := aContacts.Items.Item(iCnt) as ContactItem" gibts eine Exception "Schnittstelle nicht registriert". Diese erscheint aber erst nach ein paar Sekunden. Dieser Effekt tritt bei vielen Rechnern auf. Woran kanns liegen?
Outlook ist natürlich installiert und ich habe Administratorrechte. Das Problem tritt auch bei anderen Rechnern und Konfigurationen auf. Ich habs mal testweise über ein OLE-Objekt ersucht. Dann gehts bis zur der Zeile wo die Liste gefüllt ist. Meint das aC.Firstname nicht vom Automatisierungsobjekt unterstützt wird. ac.EMail1Address kennt er ebenfalls nicht.
ol:=CreateOleObject('Outlook.Application');
aNS := ol.GetNamespace('MAPI');
aCs := aNS.GetDefaultFolder(olFolderContacts);
M:=aCs.Items.Count;
for iCnt := 1 to M do
begin
aC:=aCs.Items.Item(iCnt);
ListBox1.Items.Add(Format('%s : %s',
[ac.FirstName,aC.Email1Address])); // hier fliegt er raus.
end;
Wie kommt man denn an die gültigen Feldnamen heran
diese "harte" Typumwandlung ist gefährlich. Anscheinend passt die verwendete Outlook_TLB.pas <b>nicht</b> zur installierten Outlook-Version. Dies ist auch die Erklärung für das Email1Address- und Schnittstelle nicht registriert-Problem.
Ein AS ist kein Typecast, sondern ruft im Hintergrund die IUnknown-Methode <b>QueryInterface</b> auf, um auf dem offiziellen COM-Weg nach dem gesuchten Interface-Zeiger zu fragen. Wenn das aufgerufene COM-Objekt (hier Outlook) die angeforderte IID (Interface-ID) nicht unterstützt, löst Delphi eine Exception aus.
Wenn das eigene Programm mit verschiedenen Outlook-Versionen umgehen muss, darf man nur die importierte Typbibliotheks-Unit verwenden, die zur <b>niedrigsten</b> Outlook-Version gehört.
Comment