Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - OleVariant auf sowas wie nil überprüfen


Mike - Mo 20.01.03 12:41
Titel: OleVariant auf sowas wie nil überprüfen
Hi Leute,

kann mir jemand sagen, wie ich bei einer OleVariant-Variable überprüfen kann, ob wirklich ein Objekt zurückgegeben wurde? Also es geht um Outlook-Automation und bisher hab ich folgendes mal so zum Testen als Code fabriziert:

Quelltext
1:
2:
3:
4:
5:
  MyOutlook := CreateOleObject('Outlook.Application.9');
    MyNameSpace := MyOutlook.GetNameSpace('MAPI');
    MyCalendarFolder := MyNameSpace.GetDefaultFolder(olFolderCalendar);
    MeineTermine := MyCalendarFolder.Items;
    Termin := MeineTermine.Find('[subject] = "Tennis mit Boris"');

Und jetzt kommt's. Wenn der Termin gefunden wurde dann wird eine IDispatch größer als $000000 zurückgegeben, ansonsten eine IDispatch gleich $000000. Nur ich kann auf diesen Wert nicht überprüfen. Der =-Operator scheint mit DispatchVariant-Variablen nicht zu gehen und eine Funktion die das macht habe ich noch nicht gefunden.

Bei irgend nem Delphi-Typ würde ich jetzt sagen

Quelltext
1:
  if Termin = nil then ...                    

aber das geht hier nicht. Auch funktioniert

Quelltext
1:
  if Termin = $000000 then ...                    

nicht. Da meckert er von wegen ungültige Variant-Operation.

Ich habe keine Idee mehr, wie ich diesen Wert abfragen könnte. Habt Ihr eine?

Moderiert von user profile iconTino: Code-Tags hinzugefügt.


Tino - Di 21.01.03 03:04

Hi,

probier mal folgendes:

Quelltext
1:
If Assigned (Termin) Then                    

Gruß
TINO


Mike - Di 21.01.03 10:49

Da meckert er schon beim Compilieren über inkompatible Typen.


Tino - Di 21.01.03 11:37

Ach so... die Variable ist ja vom Typ Variant. Oder?

Eventl. könnte das hier funktionieren:

Quelltext
1:
If VarIsNull (Termin) Then                    


Gruß
TINO


Mike - Di 21.01.03 12:23

Ja, die Variable ist vom Typ OleVariant.

Also gut, meine Variant-Variable wird darauf überprüft ob sie NULL ist. Das ist sie aber leider nicht wenn sie auf IDispatch $000000 verweist. Wenn ich aber auf diese Variable mit mit IDispatch $000000 zugreife, dann kracht's gscheit. Eine schöne Exception gibt dann z. B.

Quelltext
1:
2:
{var s: string;}
s := Termin.subject;

Ich meine, ich kann natürlich die Exception abfangen und darauf reagieren. Aber mir kommt das nicht so elegant vor.


Mike - Di 21.01.03 15:19

Danke Tino, die Lösung ist:

Quelltext
1:
if varisEMPTY(Termin) then ...                    

Dann funktionuckelt's.

Übrigens: die Buttons für Code, Quote usw. funktionieren nicht beim Beitrag schreiben (diesen Abschnitt kannst Du gerne wieder "wegredaktionieren").

Gruß


Tino - Di 21.01.03 15:52

Mike hat folgendes geschrieben:
die Buttons für Code, Quote usw. funktionieren nicht beim Beitrag schreiben.

Also bei mir funktionieren die Buttons!

Gruß
TINO