Announcement

Collapse
No announcement yet.

Was tun, wenn WordApplication-Server beendet wurde

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

  • Was tun, wenn WordApplication-Server beendet wurde

    D5Enterprsie:

    Ich verwende aus der Seite Servers ein TWordApplication. Wenn ich nun nach dem Ausfüllen und Drucken die Word-Application schließe (beim Schließen benutze ich das Ereignis OnQuit, um mir gewisse Informationen aus Word in mein Programm zu holen)), bekomme ich bei erneutem Öffnen die Meldung "RPC-Server beendet". Das ist mir natürlich klar, da ja Word beendet wurde. Meine Frage ist nun, ob ich zur Laufzeit diesen Fehler unterdrücken kann, indem ich eine neue Instanz des Servers erzeuge. Wenn ja, wie geht das? Ich habe noch keine Möglichkeit gefunden festzustellen, ob die Instanz gültig ist.

  • #2
    Hallo,

    das folgende Beispiel (stammt aus einer DLL mit Hilfsfunktionen) demonstriert einen möglichen Ansatz für die Lösung dieses Problems. Immer dann, wenn man damit rechnen muss, dass der Anwender in der Zwischenzeit die aktuelle Word-Instanz von Hand geschlossen hat, ruft das Programm vor dem Zugriff die Funktion WordCheck auf:
    <pre>
    procedure ShowExceptionMsg(sTxt : String);
    begin
    // Win32-API-Funktion verwendet DESKTOP-Fensterhandle (0)
    Windows.MessageBox(0,PChar(sTxt),PChar(cErrCaption ),
    MB_OK or MB_ICONSTOP);
    end;
    //
    function WordCheck: Integer; stdcall;
    resourcestring
    sMsg = 'Verbindung zu Microsoft Word konnte nicht aufgebaut werden!';
    var
    sVersion : String;
    aWordHandle : HWND;
    aWordMenu : HMENU;
    begin
    Result := 0;
    try
    sVersion := DataModuleWord2000.WordApp2000.Version;
    if sVersion = '9.0' then
    Result := 9
    else
    Result := 1;
    except
    try
    DataModuleWord2000.Free;
    DataModuleWord2000 := TDataModuleWord2000.Create(nil);
    with DataModuleWord2000 do
    begin
    WordApp2000.Connect;
    // Neu 04.12.2000
    aWordHandle := FindWindow('OpusApp', nil);
    if aWordHandle <> 0 then
    begin
    aWordMenu := GetSystemMenu(aWordHandle, False);
    EnableMenuItem(aWordMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
    end;
    sVersion := DataModuleWord2000.WordApp2000.Version;
    if sVersion = '9.0' then
    Result := 9
    else
    Result := 1;
    end;
    except
    ShowExceptionMsg(sMsg);
    end;
    end;
    end;
    </pre&gt

    Comment


    • #3
      Ich hatte das gleiche Problem. Nach Einfügen der Zeile "WordApplication1.Disconnect;" wird die Meldung "RPC-Server beendet" nicht mehr gesendet.

      Gruß
      H.F

      Comment

      Working...
      X