Outlook-Kalender auslesen, Delphi nach C++ (war: COM)



  • Hallo,

    ich komme eigentlich aus der Delphi-Ecke, jetzt soll ich jedoch mit dem Builder eine Routine schreiben die den Outlookkalender ausliesst. Da Delphi meine Hauptsprache ist, habe ich das Teil in Delphi geschrieben und wollte es dann portieren, aber irgendwie will es in c++ nicht klappen. hier mein Delphi-code:

    procedure TForm1.OutlookAddCalendar(CalendarFolderPath: string; Calendar: TCalendar);
    var
    Outlook : OleVariant;
    NameSpace : OleVariant;
    CalendarsRoot : OleVariant;
    CalendarsFolder : OleVariant;
    OutlookCalendar : OleVariant;
    SubFolderName : string;
    Position : integer;
    Found : boolean;
    Counter : integer;
    TestContactFolder : OleVariant;
    begin
    Outlook := CreateOleObject('Outlook.Application');
    
    NameSpace := Outlook.GetNameSpace('MAPI');
    
    CalendarsRoot := NameSpace.GetDefaultFolder(olFolderCalendar);
    
    CalendarsFolder := CalendarsRoot; //kopieren für weitere aufgaben.
    //in kalender schreiben.
    OutlookCalendar := CalendarsFolder.Items.Add;
    OutlookCalendar.Subject := Calendar.Subject;
    OutlookCalendar.Location := Calendar.Location;
    OutlookCalendar.Save;
    
    //Zugriff auf einzelne Kalenderdaten.
    OutlookCalendar := CalendarsFolder.Items[3];
    ShowMessage(OutlookCalendar.Subject);
    // freigeben.
    Outlook := Unassigned;
    end;
    

    aufgerufen wird das ganze per ButtonClick:

    procedure TForm1.Button1Click(Sender: TObject);
    var
    Calendar: TCalendar;
    begin
    Calendar.Subject := SubEdit.Text;
    Calendar.Location := LocEdit.Text;
    Self.OutlookAddCalendar(PathEdit.Text, Calendar);
    end;
    

    kann mir jemand helfen, diesen Code nach CBuilder zu bringen, habe schon viel probiert, aber ausser einigen totalabstürtzen des systems nicht viel erreicht.

    mfg
    ake

    Mod-Edit:
    Bitte aussagekräftige Überschriften formulieren. Danke!



  • Hallo,

    keine eine Idee? Naja, vielleicht geht das in C++ nicht, kann auch sein.

    mfg
    murphysto



  • Was mit Delphi geht, geht eigentlich auch mit dem C++Builder; Ausnahmen sind mir bisher nicht bekannt, und das hier ist ganz sicher keine.
    Vielleicht solltest du mal ein wenig von deinen Versuchen zeigen, anstatt einfach zu warten, bis dir das jemand übersetzt. Und "irgendwie will es in c++ nicht klappen" suggeriert, daß wir gefälligst herauszufinden haben, wieso und warum, sonst hättest du es ja dazugeschrieben 😉



  • Alternativ könntest du auch versuchen, einfach den Delphi-Code direkt im BCB zu verwenden. Anregungen dazu findest du u.a. in der FAQ im Abschnitt "Komponenten benutzen".



  • Hallo,

    selbstverständlich habe ich im builder getestet, ich wende mich doch nicht gleich an ein forum wenn mal was nicht gleich klappt!

    hier das cpp:

    void TForm1::OutlookAddCalendar(AnsiString CalendarFolderPath, TCalendarItem ci)
    {
    	OleVariant Outlook, NameSpace, CalendarsRoot, CalendarsFolder, OutlookCalendar;
    
    	Outlook = CreateOleObject("Outlook->Application");  //Läuft.
    	//NameSpace = Outlook->GetNameSpace('MAPI');  //[C++ Fehler] Main.cpp(34): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
    	//CalendarsRoot = NameSpace->GetDefaultFolder(olFolderCalendar); //[C++ Fehler] Main.cpp(35): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
    
      OutlookCalendar = CalendarsFolder->Items[3]; //[C++ Fehler] Main.cpp(37): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
    	ShowMessage(OutlookCalendar->Subject); //[C++ Fehler] Main.cpp(37): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
    	// freigeben.
    	delete Outlook; //[C++ Fehler] Main.cpp(40): E2157 Für das Löschen eines Objekts ist genau eine Umwandlung in einen Zeigeroperator erforderlich
    
    }
    

    @jansen: das teil sollte schon in cpp laufen, sonst könnt ich auch ne delphi-dll aufrufen, aber die paar zeilen sollten doch in lauffähiges cpp portiert werden können...

    mfg
    murph



  • Die Objekte sind auf dem Stack erstellt, deshalb . statt ->

    Outlook.GetNameSpace(...);
    

    Und das delete ist ebenfalls aus o.g. Grund fehl am Platz. Faustregel: kein new ohne delete, kein delete ohne new.



  • Hallo,

    @jansen: hab ich schon versucht statt desssen erhalte ich hier:

    'GetNameSpace ist kein Element von OleVariant'
    

    womit ich wieder am anfang wäre...

    murphy



  • murphysto schrieb:

    'GetNameSpace ist kein Element von OleVariant'

    Na dann wird das wohl so sein.
    Zumindest die Syntax ist jetzt aber in Ordnung. 😉



  • In wie vielen Foren hast Du die Frage eigentlich gestellt? Und dann auch noch im Minutenabstand...



  • hallo,

    @joe: ein wirklich konstruktiver beitrag von dir, hilft extrem bei der lösung des problems. bin ich dir jetzt darüber rechenschaft schuldig in welchen foren ich welche fragen stelle?
    aber keine angst, problem gelöst, und so schnell wirst du mich hier nicht mehr antreffen.

    mfg
    murph


Anmelden zum Antworten