Einzelnen Beitrag anzeigen

Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#1

innerhalb TThread: Problem mit IXMLHTTPRequest bzw. CoXMLHTTP

  Alt 9. Aug 2011, 15:51
Delphi-Version: 5
Hi!

Ich möchte gerne Informationen von Webseiten innerhalb eines TThread-Objekts abrufen (quasi im Hintergrund), damit währenddessen der User ohne Beeinträchtigung mit dem Programm arbeiten kann. Ich benutze dazu die unit MSXML2_TLB. An der Stelle, wo
Code:
req := CoXMLHTTP.Create;
steht (req ist vom Typ IXMLHTTPRequest), bekomme ich - wenn der Code ausgeführt werden soll - die folgende Fehlermeldung:

Project ... raised exception class EOleSysError with message 'CoInitialize wurde nicht aufgerufen'. Process stopped. Use Step or Run to continue.

Es wäre sehr nett, wenn mir jemand weiterhelfen könnte, denn das sagt mir überhaupt nichts. Wie gesat, meine Absicht ist nur, dass im Hintergrund eine Website abgerufen wird. Hier ein minimales Code-Beispiel, wo der Fehler auftritt:

Delphi-Quellcode:
unit Unit1;

...
type

  TForm1 = class(TForm)
  ...
  private
    Fred: TFred;
  ...
  end;

...

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Fred := TFred.Create(True);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Enabled := False;
  Fred.Resume;
end;

end.
Delphi-Quellcode:
unit uTFred;

...

type
  TFred = class(TThread)
  private
    FSeite: String;
    procedure HoleSeite;
  protected
    procedure Execute; override;
  end;

implementation

uses
  MSXML2_TLB, OleCtrls;

procedure TFred.Execute;
begin
  HoleSeite;
end;

procedure TFred.HoleSeite;
var
  req: IXMLHTTPRequest;
begin

  // FEHLER AN DIESER STELLE:
  req := CoXMLHTTP.Create;
  // exakte Stelle innerhalb der Create-Methode s. nächster Code-Block...

  req.open('GET', 'http://www.delphipraxis.net/', False, {Username} EmptyParam, {Passwort} EmptyParam);
  req.send(EmptyParam);
  FSeite := req.responseText;
end;

end.
Der Fehler tritt dabei exakt an folgender Stelle auf:

Delphi-Quellcode:
unit MSXML2_TLB;

...

implementation

...

class function CoXMLHTTP.Create: IXMLHTTPRequest;
begin
  Result := CreateComObject(CLASS_XMLHTTP) as IXMLHTTPRequest;
end;
Wo liegt das Problem? Bitte um Nachsicht, habe bisher weder mit Threads noch mit WWW-Funktionen gearbeitet.

Beste Grüße!
Robert

PS:
Ich benutze Delphi 6.
  Mit Zitat antworten Zitat