Announcement

Collapse
No announcement yet.

Problem mit Schreibweise bei GetNameSpace

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

  • Problem mit Schreibweise bei GetNameSpace

    <html>

    <head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=iso-8859-1">
    <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
    <title>Normale Seite ohne Titel</title>
    </head>

    <body bgcolor="#FFFFFF">

    <p>Hallo, In der Diskussion <em>&quot;EMail aus Programm
    aufrufen&quot;</em> im Ordner Delphi-Neulinge hat Andreas Kosch
    ein schönes Beispielprogramm gezeigt, das ich gerne in C++
    übernehmen würde. Leider sagt mein Compiler: <em><strong>'GetNameSpace'
    ist kein Element von '_Application'</strong></em>. Wie muß diese
    Zeile richtig übersetzt lauten ? Ansonsten läßt sich meine
    Übersetzung fehlerfrei compilieren. Danke - Günther</p>

    <pre><strong>DELPHI:</strong>
    aOutlook : Application_;
    aMAPI : NameSpace;
    aOutLook := CoApplication_.Create;
    aMAPI := aOutlook.GetNameSpace('MAPI');
    </pre>

    <pre><strong>C++:</strong>
    Application_ *aOutlook;
    NameSpace *aMAPI;
    aOutlook=CoApplication_::Create();
    <font color="#FF0000"><strong>aMAPI=aOutlook-&gt;GetNameSpace(&quot;MAPI&quot;</strong></font>
    </pre>
    </body>
    </html>
    Günther

  • #2
    Hat das noch nie jemand gemacht ? Eine C - Lösung statt C++ würde mir auch ausreichen. Oder geht das nur mit Delphi und Visual Basic
    Günther

    Comment


    • #3
      In der Microsoft Knowledge Base habe ich nun endlich ein Beispiel mit Visual C++ gefunden. Die richtige Schreibweise lautet:

      aMAPI=aOutlook->GetNamespace(L"MAPI");

      Also space statt Space, und ein seltsames L vor dem String "MAPI". Kann mir jemand die Bedeutung dieses L's erklären ? Es wird in der Farbe des Strings dargestellt. Macht man ein Leerzeichen dazwischen, ändert sich die Farbe und der Compiler kann nichts damit anfangen. Läßt man es weg, gibt es den Fehler "keine Übereinstimmung für ... gefunden"

      Mein Programm läßt sich nun fehlerfrei compilieren und linken. Allerdings beim Ausführen der Zeile

      aOutlook=CoApplication_::Create();

      kommt eine Fehlermeldung mit dem Fenstertitel "HRCHECK:" und dem Fehlertext " 'Create (intfObj)': Klasse nicht registriert.... ". Was muß ich tun, um die Klasse für mein Programm zu registrieren
      Günther

      Comment


      • #4
        <html>

        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
        <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
        <meta name="ProgId" content="FrontPage.Editor.Document">
        <title>Neue Seite 1</title>
        </head>

        <body>

        <p>So, jetzt bin ich mal wieder ein kleines Stück weiter. Jetzt erhalte ich die
        Fehlermeldung <i> &quot;Im Projekt ... ist eine Exception der Klasse
        EAccessVioLation aufgetreten. Meldung: 'Zugriffsverletzung bei
        Adresse.....'&quot;. </i> Der Debugger stoppt dann in der Datei Outlook_TLB.h in der
        Methode <b> Outlook_tlb::NameSpacePtr __fastcall GetNamespace(BSTR Type/*[in]*/)
        </b> und
        dort in der Zeile <b> OLECHECK(this->GetNamespace(Type, (Outlook_tlb::NameSpacePtr*)&amp;NameSpace));.</b>
        Weiter verfolgt wird dies aufgerufen aus meiner Quelltextzeile <b><font color="#FF0000"> aMAPI=aOutlook-&gt;GetNamespace(L&quot;MAPI&quot;
        </font></b>
        Hier mein Code:</p>

        <pre>#include &quot;Outlook_TLB.h&quot;

        void __fastcall TForm1::TEST1Click(TObject *Sender)
        {
        Application_ *aOutlook;
        NameSpace *aMAPI;
        MAPIFolder *aOutbox;
        MailItem *aMail;
        Recipient *aReci;
        aOutlook=CoApplication_::Create();
        try
        {
        aMAPI=aOutlook-&gt;GetNamespace(L&quot;MAPI&quot;
        aOutbox=aMAPI-&gt;GetDefaultFolder(olFolderOutbox);
        aMail=(MailItem *)aOutbox-&gt;Items-&gt;Add(olMailItem);
        aReci=aMail-&gt;Recipients-&gt;Add((wchar_t *)Edit1-&gt;Text.c_str());
        aReci-&gt;Type=olTo;
        aReci-&gt;Resolve();
        aMail-&gt;Subject=(wchar_t *)Edit2-&gt;Text.c_str(); //EditMailSubject.Text;
        aMail-&gt;Body=(wchar_t *)Edit3-&gt;Text.c_str(); // MemoMailBody.Text;
        aMail-&gt;Send();
        }
        catch(...)
        {
        }
        }</pre>
        <p>Hat das wirklich noch keiner von euch gemacht ? Gruß - Günther</p>
        <p>&nbsp;</p>

        </body>

        </html&gt
        Günther

        Comment


        • #5
          Hallo Günther,

          ich mußte auch ein bißchen rumforschen, aber glaube nun Dir eine Antwortmöglichkeit zu liefern. Ob dies Dein Problem lösen wird, weiß ich nicht, wenn ja, würde es mich freuen, wenn Du es hier kundtun könntest. Zu allem Überdruß muß ich Dir noch sagen, daß ich Outlook nicht installiert habe, da wir in der Firma Lotus Notes verwenden :-(

          Probier mal:

          Variant varOutlookApp;<br>
          varOutlookApp = CreateOleObject("Outlook.Application")

          Comment


          • #6
            Hei, das ist ja eine ganz neue Variante mit dem Variant ! Aber wie bau ich das in meine Methode ein ? Variant statt Application_ ergibt wieder einen Compilerfehler in GetNamespace ( ... ist kein Objekt von Variant ). Und ohne GetNamespace ist aMAPI nicht initialisiert, und und und ! CreateOleObjekt ist mir zuvor nie untergekommen. In der MSDN Library finde ich 5 Seiten (sogar 2x Delphi !!!) die mir aber auch nicht weiterhelfen.

            Ich werd die Hoffnung aber noch nicht aufgeben ! Gruß - Günthe
            Günther

            Comment


            • #7
              Hallo Günther,

              das mit dem L bedeutet ist was aus dem UniCode Thema. Das habe ich erst heute erfahren

              Comment


              • #8
                Jetzt habe ich ein komplette Beschreibung von "L":

                Der Variablentyp "char" ist in C oder C++ als 8-Bit Wert definiert. Daher initialisiert man Zeichenketten für Unicode nicht in der Form

                char string = "Hallo";

                sondern als

                wchar_t string L"Hallo";

                Das hab ich aus einer c´t® aus dem Jahre 1997

                Comment


                • #9
                  <html>

                  <head>
                  <meta http-equiv="Content-Language" content="de">
                  <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
                  <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
                  <meta name="ProgId" content="FrontPage.Editor.Document">
                  <title>Neue Seite 1</title>
                  </head>

                  <body>

                  <p>Kann mal jemand den Code in #3 mit dem C++Builder 5.0 testen ? Eventuell sind
                  ein paar Anpassungen vorzunehmen:</p>
                  <pre>#include&lt;Outlook8.h&gt; // statt Outlook_TLB.h
                  OutlookApplication *aOutlook; // statt Application_ *aOutlook;
                  aOutLook=CoOutlookApplication::Create(); // statt aOutlook=CoApplication_::Create();</pre>

                  <p>Mit Delphi 5.0 funktioniert es. Möglicherweise ist der Builder 4.0 hier noch buggy :-(</p>
                  <p>Danke - Günther</p>

                  </body>

                  </html&gt
                  Günther

                  Comment


                  • #10
                    Hallo Günther,

                    ich habs mit dem BCB 5 Enterprise ausprobiert und funktioniert spitze. Nur mit der Header konnte er nichts anfangen. Die richtige lautet: outlook_2k.h

                    Dann war da noch ein kleiner Tippfehler. Einmal hast Du bei aOutlook das "l" groß geschrieben und dann wieder klein. Aber jedenfalls funktioniert das Kompilieren. Nur kann ich das Programm nicht ausprobieren, da ich Outlook nicht installiert habe.

                    Gruß Roma

                    Comment


                    • #11
                      <html>

                      <head>
                      <meta http-equiv="Content-Language" content="de">
                      <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
                      <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
                      <meta name="ProgId" content="FrontPage.Editor.Document">
                      <title>Neue Seite 1</title>
                      </head>

                      <body>

                      <p>Eine nie endende Story. Roman hat mir die EXE gemailt. Jetzt krieg ich diesen Fehler:</p>

                      <pre>'this-&gt;GetNamespace(Type,(Outlook_2k::_NameSpacePtr*) &amp;NameSpace)': Objekt ist nicht mit dem Server verbunden.</pre>
                      <pre>@C:\PROGRAMME\BORLAND\CBUILDER5\INCLUDE\outlo ok_2k.h/1220</pre>
                      <pre>Press [Y]es to terminate, [N]o to continue and [C]ancel to Debug.</pre>

                      <p>Was muß man denn nun tun, um ein solches Programm auf einem anderen PC laufen zu lassen auf dem zwar Outlook2000, aber nicht der Builder 5.0 installiert ist ? </p>

                      </body>

                      </html&gt
                      Günther

                      Comment

                      Working...
                      X