Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#1

MsHtml in 64-Bit-Anwendung erzeugt Float Invalid Operation

  Alt 5. Mai 2015, 16:23
IDE: Delphi XE7
OS: Windows 7 Ultimate 64-bit

Zum Extrahieren des reinen Textes aus einer HTML-Datei verwende ich MsHtml:
Delphi-Quellcode:
// ----- Extrahiert den Text der übergebenen HTML-Datei --------------------------------------------------------------------------
// ..... http://www.swissdelphicenter.ch/de/showcode.php?id=2352
Function GetHtmlBodyText(Const HtmlText : String) : String;
Var
  IDoc : IHTMLDocument2;
  v : Variant;

Begin
  Idoc := System.Win.ComObj.CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
  Try
    IDoc.designMode := 'on';
    While IDoc.readyState <> 'completeDo
      Application.ProcessMessages;
    v := VarArrayCreate([0, 0], VarVariant);
    v[0] := HtmlText;
    IDoc.Write(PSafeArray(System.TVarData(v).VArray));
    IDoc.designMode := 'off';
    While IDoc.readyState <> 'completeDo
      Application.ProcessMessages;
    Result := IDoc.Body.InnerText;
  Finally
    IDoc := Nil;
  End;
End;
Das funktioniert wunderbar, solange es sich um eine 32-Bit-Anwendung handelt. Lasse ich das Projekt jedoch als 64-Bit-Anwendung in der IDE (Debug-Modus) ausführen, erscheint diese Fehlermeldung und das Programm beendet sich sofort, nachdem ich auf Fortsetzen gedrückt habe:

... eine Exception der Klasse $C0000090 mit der Meldung 'c0000090 FLOAT_INVALID_OPERATION' aufgetreten.

Ohne IDE gestartet beendet sich das Programm kommentarlos.

Nun ist ja der Internet-Explorer in Win 7-64 eine 32-Bit-Anwendung, somit auch die DLL, auf die MsHtml zurückgreift. Okay, das hatten wir ja schon, daß man für das Einbinden einer DLL in eine 64-Bit-Anwendung eben auch die 64-Bit-DLL benötigt. Kein Problem, dachte ich mir, holst du dir eben den IE-64 für Win7-64. So einfach macht es mir Microsoft aber nicht, denn die Installation des IE-11-64bit bricht mit dem Hinweis auf notwendige Updates ab. Man landet dann auf dieser Seite. Gut, dann lade ich mir jetzt eben diese Updates runter und installiere sie.

Ich starte mit Windows6.1-KB2729094-v2-x64.msu
Ein Update ist für die Segoe UI-Symbol-Schriftart in Windows 7 und Windows Server 2008 R2 verfügbar. Dieses Update bietet Unterstützung für Emoji-Zeichen und einige Serversteuerelement-Glyphen, die in Windows 8 und Windows Server 2012 enthalten sind. Nach der Installation dieser Komponente müssen Sie den Computer neu starten.

Daraufhin erhalte ich folgende Fehlermeldung:

Eigenständiges Windows Update-Installationsprogramm
Das Installationsprogramm hat einen Fehler festgestellt: 0x80070422
Der angegebene Dienst kann nicht gestartet werden. Er ist deaktiviert oder nicht mit aktivierten Geräten verbunden.


Was ist das für ein Dienst? Der Windows-Installer-Service läuft (gestartet). Ich komme da erstmal nicht weiter ...

Alternativen wären:
  1. auf MsHtml zu verzichten und einen Html-Parser zu verwenden. Doch die guten kosten was, die kostenlosen taugen nichts (zumindest soweit mir bekannt). Das Projekt ist nicht kommerziell, sondern ein rein privater "Spaß", der eigentlich außer Zeit und Mühe nichts kosten sollte ...
  2. nur das 32-Bit-Kompilat zu verwenden (werde ich wohl machen müssen)
  Mit Zitat antworten Zitat