Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: TCP Socket Programmierung möglichst ohne Komponenten

  Alt 20. Okt 2009, 16:53
Ich schmeiß hier mal folgendes rein, falls es jemand interessiert:
(Wie man sieht eine Konsolenanwendung)
Delphi-Quellcode:
program Project1;

//mit Konsole
{$APPTYPE CONSOLE}


uses
  activeX;


//Deklaration des Interfaces für den Zugriff auf XMLHttp-Klasse vom Internet Explorer (von Delphi generieren lassen)
//Ich habe mal die von mir benötigten Funktionen von safecall auf stdcall umgewandelt.
type
  IXMLHTTPRequest = interface(IDispatch)
    ['{ED8C108D-4349-11D2-91A4-00C04F7969E8}']
    function open(const bstrMethod: WideString; const bstrUrl: WideString; varAsync: OleVariant;
                   bstrUser: OleVariant; bstrPassword: OleVariant):HResult; stdcall;
    procedure setRequestHeader(const bstrHeader: WideString; const bstrValue: WideString); safecall;
    function getResponseHeader(const bstrHeader: WideString): WideString; safecall;
    function getAllResponseHeaders: WideString; safecall;
    function send(varBody: OleVariant):Hresult; stdcall;
    procedure abort; safecall;
    function Get_status: Integer; safecall;
    function Get_statusText: WideString; safecall;
    function Get_responseXML: IDispatch; safecall;
    function Get_responseText: WideString; safecall;
    function Get_responseBody: OleVariant; safecall;
    function Get_responseStream: OleVariant; safecall;
    function Get_readyState: Integer; safecall;
    procedure Set_onreadystatechange(const Param1: IDispatch); safecall;
    property status: Integer read Get_status;
    property statusText: WideString read Get_statusText;
    property responseXML: IDispatch read Get_responseXML;
    property responseText: WideString read Get_responseText;
    property responseBody: OleVariant read Get_responseBody;
    property responseStream: OleVariant read Get_responseStream;
    property readyState: Integer read Get_readyState;
    property onreadystatechange: IDispatch write Set_onreadystatechange;
  end;

//name der Klasse als Ressource (dadurch kann man vom IE auch auf Opera oder auf eins der restlichen UnterschichtBrowser umsteigen ;) )
resourcestring
 ClassName='Msxml2.XMLHTTP';


//hier Ersetzen, was mit der heruntergeladenen Seite passieren soll.
procedure DoSomething(text:Widestring);
begin
  writeln(text);
  readln;
end;

//Herunterladen mittels XMLHttpRequest
procedure Run;
var XMLHttpRequest:IXMLHttpRequest;
    ClassID:TGUID;
begin
  if CLSIDFromProgID(PWideChar(WideString(LoadResString(@ClassName))),ClassID) <> s_ok then
    writeln('Fehler bei CLSIDFromProgID')
  else
  begin
    if CoCreateInstance(ClassID,nil,CLSCTX_INPROC_SERVER,IXMLHttpRequest,XMLhttpRequest) <> s_ok then
      writeln('Fehler bei CoCreateInstance')
    else
    begin
      if XMLHttpRequest.open('Get','http://www.delphipraxis.net/',false,'','')<>s_ok then
        writeln('Fehler bei XMLHttpRequest.open')
      else
      begin
        if XMLHttpRequest.send(0)<>s_ok then
          writeln('Fehler bei XMLHttpRequest.send')
        else
        begin
          if XMLHttpRequest.readyState=4 then
            DoSomething(XMLHttpRequest.responseText)
          else
            writeln('Fehler beim Laden des Dokuments');
        end;
      end;
    end;
  end;
end;


//Programmstart
begin
  coinitialize(nil);
  Run;
  couninitialize;
end.
Edit: Soviel rote Kästen: da war doch tatsächlich jemand schneller...
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat