Announcement

Collapse
No announcement yet.

Mehrere Objektinstanzen ansprechen

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

  • Mehrere Objektinstanzen ansprechen

    Gibt es eine Möglichkeit aus meinem laufenden Delphiprogramm ein Com Interface auf eine bestimmte Wordinstanz unter mehreren laufenden Instanzen zu bekommen.
    Mit anderen Worten Word ist z.B. 3 mal geöffnet. Ich möchte die dritte Instanz ansprechen.
    GetActiveOLEObject gibt immer einen Zeiger auf die selbe Instanz zurück.

    Bin für jeden Hinweis dankbar

    Juergen

  • #2
    Hallo,

    wenn man Word 2 Mal startet, taucht trotzdem in der Anzeige des <i>Task-Managers</i> nur <b>1 Prozess</b> für WINWORD.EXE auf. Über GetActiveOleObject ist nur die Objektinstanz erreichbar, die sich in der ROT (Running Object Table) angemeldet hat - und das ist im Fall von Microsoft Word die <b>globale</b> Objektinstanz des <b>Global</b>-Objekts, das über <b>Application</b> den Zugriff auf alles bereitstellt. Im Verzeichnis <i>Kapitel 3\ShowROT</i> auf der CDROM zu meinem Buch <i>COM/DCOM/COM+ mit Delphi</i> ist das Beispielprojekt ShowROT.dpr zu finden, das den Inhalt der ROT ausliest und anzeigt. Dort taucht ebenfalls nur eine einzige Word-Instanz auf und somit muss GetActiveOleObject immer die gleiche Objektinstanz zurückliefern. Aber dieses Application-Objekt von Word ist in der Lage, <b>alle</b> geöffneten Word-Dokumente anzusprechen (denn Word läuft ja nur als ein Prozess!). Der Zugriff auf dieses globale Objekt könnte so aussehen:
    <pre>
    constructor TOSWordObject.Create(NewInstance : Boolean);
    begin
    FNewInstance := False;
    if NewInstance then
    begin
    FWordApp := CoApplication_.Create;
    FNewInstance := True;
    end
    else
    begin
    try
    FWordGlobal := CoGlobal.Create;
    FWordApp := FWordGlobal.Application_;
    except
    FWordApp := CoApplication_.Create;
    FNewInstance := True;
    end;
    end;
    end;
    </pre>
    Wenn eine bereits vorhandene Objektinstanz von Word mitgenutzt werden soll, versucht das Programm zuerst den Zugriff auf das <b>Global</b>-Objekt, um von dort den Interface-Zeiger auf das <b>Application</b>-Objekt von Microsoft Word zu erfragen. Gibt es kein Global-Objekt, muss die Application-Instanz neu erzeugt werden

    Comment

    Working...
    X