Newsgroup: it.comp.lang.delphi
Titolo: Delphi, winsock, runtime... AIUTO!!!!

Ciao,
non e' che sia proprio un neofita con D4, ma mi trovo ora a che fare con un
campo a me praticamente ignoto: quello dei protocolli etc.
Vi spiego il mio problema. Sto realizzando una piccola appz freeware, in cui
uso parte dell'esempio preso dai demo di D4 Server Edition:
"demos\internet\http". Il programma deve collegarsi a un certo indirizzo ip,
prendere un html e immettere i dati in una stringlist. E fin qui tutto
benissimo...
Il programmino funge egregiamente se lo eseguo sul mio PC connesso a
internet. Funziona nel senso che anche quando non sono connesso, il
programma avvia bene, e al limite mi da' errore se provo a caricare la
pagina web mediante tcp/ip quando sono disconnesso.
Pero' sul mio altro PC, che non e' connesso alla rete, e in cui non ho
installato tcp/ip, accesso remoto e frattaglie, il programma mi da questo
errore all'avvio:
"Exception ESockError in module httpdemo.EXE
 at 0004D715. 10093: Successful WSAStartup
 not yet performed."
Se poi provo a compilare l'appz direttamente sul mio PC senza rete, usando
il tasto "play" per fre il debugging, mi da questo errore:
"Project httpdemo.exe raised exception class
 ERangeError with message 'Range check error'.
 Process stopped. Use Step or Run to continue."
Al che, se visualizzo la CPU Window, scopro che l'errore sta all'interno
dell'assemblato appartenente alla routine "Winsock.initialization".
-----
Riassumendo, vorrei capire se e' possibile (o qualcuno sa come aggirare il
fatto) fare questa inizializzazione non in automatico all'esecuzione del
programma, ma magari in un secondo tempo premendo qualche button, al limite
che venga mostrato un mio messaggio di errore, ma non in questo modo cosi'
"barbaro" =(
Preciso che in questo progetto esempio non ho trovato nessuna routine di
inizializzazione da nessuna parte, le procedura Form.OnCreate non esiste
neanche!!!, per cui non so dove stiano queste inizializzazioni! Forse
l'applicazione quando carica le librerie nella lista delle "uses" fa qualche
inizializzazione? O magari non trova qualche file? Ma cavolo! Io la
winsock.dll comunque la tengo sul mio PC!!! =(
AIUTO! Qui non sto capendo piu' niente. =(
Se qualcuno potesse darmi una mano gliene sarei davvero grato! - {MSX} ma
dove sei finito?
Luca Antignano, Sassari - 
lucant...@rocketmail.com

Dai uno sguardo a questo tip trovato nel sito di Torry's al seguente
indirizzo
http://www.swissdelphicenter.ch/torry/showcode.php?id=661
potrebbe fare al caso tuo.

Ti ringrazio ma, umm... ho paura di no =(
non credo che una funzione associata a un button sia la soluzione. Il
problema si presenta durante l'avvio del programma! =(

 problema si presenta durante l'avvio del programma! =(
Certo che il tasto non c'entra, utilizza la funzione che è stata
implementata per determinare se la winsock è inizializzata oppure no ed
esegui il tuo codice di conseguenza...

  not yet performed."
Se utilizzi un componente TSocket per le connessioni, guarda il
sorgente:
constructor TCustomWinSocket.Create(ASocket: TSocket);
begin
  inherited Create;
  Startup;
dove Startup č:
procedure Startup;
var
  ErrorCode: Integer;
begin
  ErrorCode := WSAStartup($0101, WSAData);
  if ErrorCode <> 0 then
    raise ESocketError.CreateResFmt(@sWindowsSocketError,
      [SysErrorMessage(ErrorCode), ErrorCode, 'WSAStartup']);
end;
Qui viene sollevata l'exception.
Spero ti sia utile.
--
Ciao !  Davide DG.

Ciao ancora,
su consiglio di Davide DG ho fatto le seguenti prove, per determinare il
punto esatto in cui si verifica l'exception.
- creato nuovo progetto e inserito un componente NHTTP, senza associare
nessun evento.
Risultato: il programma genera la suddetta exception in avvio
- stesso progetto, dopo aver rimosso il componente NHTTP dal form; le uses
aggiunte (Psock  e nmhttp) sono rimaste
Risultato: il programma non crasha!
Stando cosi' le cose, saro' probabilmente costretto a generarmi il
componente NHTTP a runtime.
Vi ringrazio molto per l'aiuto ricevuto finora =)
Luca, Sassari

   Startup;
Beh... a parte che mi sono perso all "inherited" (che genio eh?), cmq
seguiro' i tuoi consigli e cerchero' di creare il NHTTP a runtime =)