Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi GetActiveOleObject Fehler in der log-Datei (https://www.delphipraxis.net/200063-getactiveoleobject-fehler-der-log-datei.html)

delphicoder123 15. Mär 2019 13:10

GetActiveOleObject Fehler in der log-Datei
 
Hallo,
wenn in der Log-Datei wegen dieser Zeile Code GetActiveOleObject('Word.Application'); ein Fehler dokumentiert wird.
Es beim Compilieren aber kein Fehler gab.
Woran kann das liegen?

Exception EOleSysError occured in ...
Call stack:
Fehler in Zeile 1201

Jasocul 15. Mär 2019 13:15

AW: GetActiveOleObject Fehler in der log-Datei
 
Beim Compilieren wird nicht geprüft, ob Word existiert/installiert ist. Zu dem Zeitpunkt ist das nur irgendein String. Da kann auch "Hallo Welt" stehen.

delphicoder123 15. Mär 2019 13:16

AW: GetActiveOleObject Fehler in der log-Datei
 
Bei mir ist Word installiert. Also kann das nicht der Fehler sein.

delphicoder123 15. Mär 2019 13:23

AW: GetActiveOleObject Fehler in der log-Datei
 
Ich bekomme glaube ich den Fehler, weil bei mir keine Word Instanz läuft?
Wie kann ich überprüfen, ob eine Instanz von Word läuft?

Delphi.Narium 15. Mär 2019 13:25

AW: GetActiveOleObject Fehler in der log-Datei
 
Zitat:

Zitat von RTFM
GetActiveOleObject returns a reference to the IDispatch interface of the active object for the given class indicated by ClassName. ClassName is the ...

Installiert reicht nicht, muss auch laufen.

Wenn's nicht läuft, gibt es diesen Fehler.
Bei diesem Fehler musst Du Word dann halt starten -> CreateOleObject('Word.Application')

Es wäre schön, wenn Du uns auch den Quelltext dazu zeigen könntest, dann kann man eventuell erkennen, wo die Fehlerursache liegt.

http://www.delphigroups.info/2/08/262770.html

delphicoder123 15. Mär 2019 13:55

AW: GetActiveOleObject Fehler in der log-Datei
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1427845)
Zitat:

Zitat von RTFM
GetActiveOleObject returns a reference to the IDispatch interface of the active object for the given class indicated by ClassName. ClassName is the ...

Wenn's nicht läuft, gibt es diesen Fehler.
Bei diesem Fehler musst Du Word dann halt starten -> CreateOleObject('Word.Application')

Nur, wenn kein Word läuft, soll ein OLEObjekt erstellt werden.
Mit diesem Code kann ich überprüfen, ob eine Word Datei bereits läuft?

Code:
function GetWord: IDispatch;
var
  ClassID: TGUID;
  Unknown: IUnknown;
  HR: HResult;
begin
  ClassID := ProgIDToClassID('Word.Application');
  HR := GetActiveObject(ClassID, nil, Unknown);
  if (HR = MK_E_UNAVAILABLE) then
    Result := CreateComObject(ClassID) as IDispatch
  else begin
    OleCheck(HR);
    OleCheck(Unknown.QueryInterface(IDispatch, Result));
  end;
end;

delphicoder123 15. Mär 2019 15:07

AW: GetActiveOleObject Fehler in der log-Datei
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1427845)
Zitat:

Zitat von RTFM
GetActiveOleObject returns a reference to the IDispatch interface of the active object for the given class indicated by ClassName. ClassName is the ...


Es wäre schön, wenn Du uns auch den Quelltext dazu zeigen könntest, dann kann man eventuell erkennen, wo die Fehlerursache liegt.

http://www.delphigroups.info/2/08/262770.html

Den genauen Code darf/kann ich nicht weitergeben. Aber in dem try ist dieser Code.

Worddok := GetActiveOleObject('Word.Application');

In dem Link, den du mir geschickt hast, wird auch GetActiveObject verwendet.
Dieser Befehl führte doch zu der Exception.

Deswegen hilft mir das auch nicht weiter?

HolgerX 15. Mär 2019 16:43

AW: GetActiveOleObject Fehler in der log-Datei
 
Hmm..

Dir ist schon bekannt, das dir GetActiveOleObject('Word.Application') ein IDispatch interface einer 'laufenden' Word-Anwendung zurück gibt? Somit musst Du erst Word starten, damit das funktioniert.

Wenn kein Word läuft, dann bekommst du die Exception!

Willst Du hingegen Word 'starten' und dann per OLE verwenden, dann ist ein CreateOleObject('Word.Application') notwendig!

Delphi.Narium 16. Mär 2019 11:09

AW: GetActiveOleObject Fehler in der log-Datei
 
In dem Link, den ich Dir geschickt habe, steht zuerst ein Get...

Und wenn das scheitert, fliegt eine Exception, das heißt, es läuft noch kein Word.

Und in der Exceptionbehandlung wird dann mit Create... eine Wordinstanz erstellt.

Von daher hilft es Dir durchaus.

Oder:

Das ist Die Lösung wie man es für gewöhnlich macht.

Wenn Du möchtest, kannst Du das CreateOleObject noch in einen eigenen Exceptionblock packen, damit Du dort, wenn ein Fehler auftritt (der dann bedeutet, es ist kein Word installiert), auch auf diese Situation reagieren kannst.

Grob so:
Delphi-Quellcode:
Try
  Get ...;
Except
  try
    Create ...;
  Except
    MessageDlg(Format('Es ist kein ... installiert.%s%s',[#13#13,e.Message]),mtError,[mbOk],0);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz