Announcement

Collapse
No announcement yet.

Problem mit* AppointmentItemPtr von Outlook

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit* AppointmentItemPtr von Outlook

    Mit dem folgenden Codeschnipsel kann ich die Einträge (oder den gewählten Eintrag) des Outlook-Kalenders auslesen.
    <pre>
    *ns =* appl1->GetNamespace(L"MAPI");
    *fldr = ns->GetDefaultFolder(olFolderCalendar);
    *itms = fldr->Items;
    *_DAppointmentItemPtr appt = itms->Item(1);
    *ShowMessage(appt->Subject);
    </pre>
    Das funktioniert auch wunderbar unter Outlook 2000.
    Aber wenn ich den Code unter Outlook 97 verwende, bekomme ich die Exception:

    [ p->QueryInterface(GetIID(),(LPVOID*) ... No such Interface supportet ... ]

    Weiß jemand den Grund?

    PS: Ich habe nicht im C++ BuilderForum gepostet, da ich denke, daß ich hier evtl. schneller eine Antwort erhalte, außerdem dürfte der Code ungefähr der gleiche wie bei Delphi sein.

  • #2
    Das hört sich glatt so an, als wenn Du eine erst von Outlook 2000 unterstützte Funktion oder Variable ansprechen willst!<br>
    Deinem Code kann ich so ziemilich gar nichts entnehmen, schon gar nicht die genaue Stelle, wo die Exception kommst. Vielleicht importierst Du Dir von Outlook97 mal die Typbibliothek, sofern das im Builder so ähnlich wie in Delphi funktioniert. Dort kann es dann sein, dass Du einige Deiner genutzen Funktionen nicht findest.<br>
    In dem Falle kannst Du gar nichts tun, ausser nur Funktionen, die schon ab Outlook 97 unterstützt werden, zu nutzen. Leider kenne ich mich mit der Outlookprogrammierung nicht so gut aus
    Schöne Grüße, Mario

    Comment


    • #3
      Ich benutze die bereits importierten "Server" von Builder 5 (oder Delphi). Ich nutze zur Zeit das Package für Office 97.
      Die exception kommt, sobald ich auf den AppointmentItemPtr zugreifen will, also an der Stelle, wenn ich auf "appt->Subject" zugreife.
      (Also es wird kein AppoiuntmentitemPtr bei
      "_DAppointmentItemPtr appt = itms->Item(1);"
      zurückgeliefert.
      Ich hatte schon gedacht das es ein Bug ist, und ein Pointer auf MailItem geliefert wird, aber da bekomme ich das gleiche Problem

      Comment


      • #4
        Kannst Du mal überprüfen, ob Du wirklich die TLB von Office 97 nutzt!?<br>Bei Delphi5 war es glaub ich so, dass das Update 2 (?) die TLB's automatisch und ohne Rückfrage auf Office 2000 (9.0) aktualisiert hat. Dann wäre der Fehler auch leicht erklärbar..
        Schöne Grüße, Mario

        Comment


        • #5
          Nein, ich nutze die 97er. Eigentlich habe ich soger schon den Beweis dafür, daß ich die richtige tlb verwende. Denn ich bekomme ja einen korrekten ApplicationPointer den MAPI Namespace und MAPIFolder funktioniert auch. Also es muß ein anderes Problem sein

          Comment


          • #6
            Hallo Sven,<p>
            nur weil einige Zugriffe funktionieren, zu vermuten, Du arbeitest mit der richtigen TLB ist schon mutig. Ich würde einfach mal in die TLB-Datei reinschauen und die Version überprüfen.<p>
            Ansonsten habe ich bei mir folgenden Source zum Laufen gebracht. Mit Outlook 97 konnte ich es nicht testen, dass ist hier nirgens drauf...:<p>
            <pre class="sourcecode"><code>
            <b>procedure</b> TForm1.Button1Click(Sender: TObject);
            <b>Var</b> App: Outlook8.TOutlookApplication;
            ns: Outlook8.NameSpace;
            fldr: Outlook8.MAPIFolder;
            itms: Outlook8.Items;
            appt: Outlook8._DAppointmentItem;
            <b>begin</b>
            App := TOutlookApplication.Create(Self);
            App.Connect;
            ns := App.GetNamespace(<font color="#9933CC">'MAPI'</font>);
            fldr := ns.GetDefaultFolder(olFolderInbox);
            itms := fldr.Items;
            <b>IF</b> itms.Count &gt; 0
            <b>THEN</b> appt := Outlook8._DAppointmentItem(itms.Item(1));
            ShowMessage(appt.Subject);

            App.Disconnect;
            <b>end</b>;

            </code></pre><p>
            Was interessant war: _DAppointmentItemPtr gibts in Delphi nicht. Warum, weiß ich leider nicht.<p>
            Schöne Grüße, Mario Noac
            Schöne Grüße, Mario

            Comment


            • #7
              Ich habe nun zum Test meine Komponenten rausgeschmissen, und die "msoutl8.olb" importiert, (das sollte ja die richtige sein.) Aber leider habe ich damit das selbe Resultat erzielt.

              Besteht die Möglichkeit, das Du mir das oben beschriebene Programm als exe zuzuschicken könntest, dann könnte ich es mit Office 97 testen. (Ich kann leider den Code nicht compilieren, da ich kein Delphi installiert habe)

              Vielen Dank schonmal
              Sven

              [email protected]

              Comment


              • #8
                ist unterwegs..
                Schöne Grüße, Mario

                Comment


                • #9
                  Wie Du sicherlich nicht anders erwartet hast, funktioniert es auch noch mit Office 97 :-)
                  Tja, nun wird es wohl doch am C++ Builder liegen. Ich habe einfach mal auf einem anderem Rechner BCB5 neu installiert, und den Servicepack 1 draufgemacht. Aber da bekomme ich das gleiche Problem. Ich werde mir nun nocheinmal alles genau anschauen. Den Beweis, daß es nicht an Microsoft.olb liegt, habe ich ja nun.

                  Vielen Dank für die nette Unterstützung.

                  Sve

                  Comment


                  • #10
                    Nicht am Builder, eher an mir. Hier ist die Antwort, wie es funktioniert.

                    _DAppointmentItemPtr appt;
                    appt = (_DAppointmentItem*)items->Item(Variant(i));
                    ShowMessage(appt->Subject);

                    Und genauso, funktioniert auch Dein Code.

                    Also vielen Dank.

                    Ich hätte anscheinend noch Wochenlang weitergemacht.

                    Sve

                    Comment

                    Working...
                    X