Announcement

Collapse
No announcement yet.

Typbibliothek von Office 2000 in Delphi 3 importiern.

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

  • Typbibliothek von Office 2000 in Delphi 3 importiern.

    Hallo,

    ich versuche verzweifelt in Delphi 3 die Typbibliothek von Outlook 2000
    (bzw. Office 2000) zu importieren.
    Bisher habe ich immer die späte Bindung verwendet, ist aber mit der Zeit
    anstrengend zu programmieren.

    Beim importieren funktioniert noch alles einwandfrei, aber beim compilieren
    bekomme ich andauernd Fehlermeldungen.
    z.B. "commandbar nicht gefunden"
    "SyncObjs nicht gefunden"
    "MailItem nicht gefunden"

    Bei Delphi 5 geht es einwandfrei. Ich kann aber leider noch nicht
    umsteigen, da sonst alle meine Kunden das Update der BDE 5.0 auf
    Ihre Clients installieren müssten....

    Kann mir bitte irgendwer helfen???

    Danke im Voraus

    Ulrich Hutter

  • #2
    Hallo,

    wenn beim Compilieren die Fehlermeldung "commandbar nicht gefunden" erscheint, ist dieser Interface-Name <b>nicht</b> in der beim Import der Typbibliothek von Delphi 3 generierten <i>xyz_TLB.pas</i> enthalten. Es werden mit Sicherheit immer dann Probleme auftreten, wenn mit Delphi 3 eine Typbibliothek importiert wird, aber dann im eigenen Programm Aufrufe verwendet werden, die mit Delphi 4 und Delphi 5 geschrieben wurden. Jede Delphi-Version unterscheidet sich im Detail in der importierten Typbibliothek, so dass ich zuerst nachschauen würde, ob in der eigenen importierten xyz_TLB.pas auch tatsächlich die Interface-Namen in exakt der Schreibweise auftreten, die im Programm verwendet werden.

    P.S: Die von Delphi beim Import der TLB zugewiesenen Interface-Namen sind Schall und Rauch, für COM spielen nur die <b>CLSID</b> und <b>IID</b> eine Rolle - und die sind in jeder Delphi-Version gleich. Allerdings gilt dies nicht für die "sprechenden Namen" der Interfaces, hier hat Delphi "freie Hand" (was die Bezeichnung angeht) und ändert den Namen immer dann, wenn eine Kollision mit einem bereits registrierten Bezeichner auftritt

    Comment


    • #3
      Hallo,

      ich gehe von einem "nackten" Delphi mit einem leeren Projekt aus.
      In diesem wird die Typbibliothek von "Microsoft Office 9.0 Object Library" importiert.
      Beim kompilieren dieses nur in Delphi 3.0 geschriebenen LEEREN projektes, kommt es immer zum Fehler "Undefinierter Bezeichner commandbarComboBox". Ich habe sogar schon versucht, alle Komponenten von Delphi zu entfernen, um einen möglichen NAmens-Konflikt aus dem Weg zu geehen --> ohne Erfolg.
      Nach Ihrem Tipp, habe ich bemerkt, dass Delphi commandBarComboBox in _CommandBarComboBox umbenennt, aber nur in der Type Dekleration.

      Hierzu nur eine Verständnisfrage:
      Was bedeutet bei der "Umwandlungs-Log:" am Beginn einer Typbibliothek z.B. die Meldung:
      "Das übergeordnete Interface hat ein Member mit dem Namen
      QueryInterface. _CommandBarsEvents.QueryInterface wurde zu QueryInterface_ geändert"
      , obwohl ich kein übergeordnetes Interface finden kann??

      Danke für die Mühe

      Ulrich Hutte

      Comment


      • #4
        Hallo,

        Delphi 5 benennt ebenfalls das Interface in _CommandBarComboBox um, allerdings ist hier zusätzlichleich die folgende Deklaration zu finden (so dass die Umbenennung keine Folgen hat):
        <pre>
        // ************************************************** ************//
        // Deklaration von in der Typbibliothek definierten CoClasses
        // ************************************************** ************//
        CommandBars = _CommandBars;
        CommandBarComboBox = _CommandBarComboBox;
        CommandBarButton = _CommandBarButton;
        </pre>
        Die Interface-Methode QueryInterface gehört zu IUnknown, und alle Interfaces erben die Interface-Deklaration (aber nicht die Implementierung) dieses Interfaces. Somit hat jedes Interface auch die Methode QueryInterface in seinem Stammbaum.
        <pre>
        // ************************************************** *******************//
        // DispIntf: _CommandBarsEvents
        // Flags: (4112) Hidden Dispatchable
        // GUID: {000C0352-0000-0000-C000-000000000046}
        // ************************************************** *******************//
        _CommandBarsEvents = dispinterface
        ['{000C0352-0000-0000-C000-000000000046}']
        procedure OnUpdate; dispid 1;
        end;
        </pre>
        CommandBarsEvents ist ein Dispinterface (IDispatch) und stammt somit ebenfalls von IUnknown ab.

        P.S: In Delphi 5 kann über die Datei <b>TLIBIMP.SYM</b> ein
        Aliasname für doppelt genutzte Bezeichner definiert werden, so dass der Entwickler wieder die Kontrolle über die beim Import der TLB passierende Namensvergabe hat

        Comment

        Working...
        X