IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

déterminer la version de Winsock installée


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Par défaut déterminer la version de Winsock installée
    Dans la version 9 des composant indy, on utilise la couche Winsock 2 plutot que la 1, et donc on utilise la dll (WS2_32.DLL). Cependant, comment pouvons nous déterminer quelle version de Winsock est installé pour eventuellement lancer un patch de maj proposé par microsoft pour les anciens systèmes Win95 !!!!!
    (N.B.winsock2 est automatiquement installé sur w98 et + !!!)

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 66
    Par défaut
    Avec la réponse à ton précedent sujet, ça n'irait pas ?
    http://www.developpez.net/forums/viewtopic.php?t=59450

    De plus, tu peux auparavant tester si la Dll existe ...

    A+

  3. #3
    Membre averti
    Inscrit en
    Janvier 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Par défaut
    non ... ca n'ira pas avec la question précedente ... pourquoi ????
    simplement parce que cal couche socket en ait à la version 2.2
    alors que la dll (ws2_32.dll) qui les implément est elle déjà à la
    version 4.???
    c pour cela que je voulais lire le num de version de la dll si elle existe, mais l'existance de la dll ne veut pas dire que les socket level 2 sont installés ou fonctionnent correctement.
    Je pense avoir trouvé une solution, c d'utiliser la fnc WSAStartup pour initialiser la couche socket ...
    je vais faire un essai de je posterai la réponse si elle marche convenablement !!!!
    merci de toute les facons !!!!

  4. #4
    Membre averti
    Inscrit en
    Janvier 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Par défaut [RESOLU] déterminer la version de Winsock installée
    c bon .. j'y arrive en utilisant la fonction WSAStartup !!!!
    si ca vous interesse, je peux poster le code !!!

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2002
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 6
    Par défaut
    Salut
    J'ai enormement besoin de ton code. Ca me ferai vraiment pliasir si tu me le poste

    merci d'avance.

  6. #6
    Membre averti
    Inscrit en
    Janvier 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Par défaut
    Ok .. voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    // -------------------------------------------------------------------------
    // function Socket2isInstalled(): boolean;
    // fnc déterminant si les Socket2 sont correctement installés ou non
    // params :  _none
    // result   :  True si Socket2 Installée et actifs False sinon
    // Original Author : Bluex
    // 19 fev 2003 
    // --------------------------------------------------------------------------
    function Socket2Installed(): boolean;
    const SocketDllName = 'WS2_32.dll';
          MajrVer        = 2; // version 2.0 requise
          MinrVer        = 0; // la version ext tjrs codée  (MajrVer.MinrVer) ici (2.0)
    var wVersionRequise : word;
        wDonneeSA       : WSADATA;
        erreur          : integer;
    begin
      result := false;
      if not FileExists(GetSystemDirectoryStr  + SocketDllName) then exit;
      wVersionRequise := MakeWord(MajrVer,MinrVer);
      try
        erreur := WSAStartup( wVersionRequise , wDonneeSA );
        if (erreur=0) then begin
         if ( LOBYTE( wDonneeSA.wVersion ) <> MajrVer ) or (HIBYTE( wDonneeSA.wVersion) <> MinrVer) then begin
           WSACleanup();    // on libère les ressources allouées par WSAStartup !!!
           exit;
         end
         else WSACleanup(); // on libère les ressources allouées par WSAStartup !!!
        end
        else exit;
      except
        on e : exception do begin
          result := false;
          exit;
        end;
      end;
      result := true;
    end;
    Cette fnc retourne Vrai si la couche socket est installée , faux sinon. la version recherchée des socket doit être indiqué lors de l'appel à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wVersionRequise := MakeWord(2,0) // ici on demande la 2.0
    Autre remarque, cette fonction retourne vrai si la version voulue ou supérieure est installée, par exemple si on passe la 2.0 alors que la 2.2 est installée, elle retournera vrai et fonctionnera comme la 2.0 !!!! qui peux le plus .. peut le moins .... :idc:

    N.B. Ce code est basé sur l'exemple du MSDN de micro$oft concernant la fonction WSAStartup() écrit en C .. sur lequel j'ai dû (comme d'hab chez cro$soft) corriger un bug de libération de ressource
    la fonction GetSystemDirectoryStr est une fonction qui retourne le répertoire system de windows avec un antislash à la fin .... je l'ai écrite en faisant appel à GetSystemDirectory de Windows (code que j'avais fait ya lontemps et qui est un peux dégueu...)!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function GetSystemDirectoryStr():string;
    var temp : array[0..999] of char;
        size : cardinal;
       s : string;
    begin
      size:=GetSystemDirectory(temp, sizeof(temp));
      s := temp;
      if size>0 then result:=s + '\'
                else result:='';
    end;

  7. #7
    Membre averti
    Inscrit en
    Janvier 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Par défaut
    désolé ... mais rq importante (pour ceux qui ne conaissent pas ) ...
    n"oubliez pas de rajouter les unités "Windows" et "Winsock" à votre clause Uses !!!

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2002
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 6
    Par défaut
    Merci,
    Ce code me sera d'une grande utilité.
    Mais laisse moi te poser une question:
    J'ai developpé une appli socket sous win2000 et qui marche correctement.
    Mais lorque je l'execute sous 98 j'ai des pb. notement lorsque le client ne trouve pas son serveur, je recois l'exception "Erreur socket windows...(10049) avec l'API 'Async Lonnkup'". J'ai tout fais sans succes pour attraper cette exception.
    J'ai regardé la version du fichier winsock.dll sous windows 2000 et c'etait a la version 2.0 mais sous 98 c'etait 4.0.
    Je me demande si c'est un pb de version.
    D'autres part je voudrais savoir si chaque systeme d'exploitation a sa propre version de winsock.dll ou alors accepte indifferement n'importe quelle version.

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [UBUNTU] Quel version dois-je installer ?
    Par miagomiago dans le forum Ubuntu
    Réponses: 8
    Dernier message: 14/09/2006, 16h22
  2. Comment savoir la version de winsock sur un PC ?
    Par andrianiaina dans le forum Développement
    Réponses: 2
    Dernier message: 07/09/2006, 17h24
  3. Réponses: 7
    Dernier message: 28/03/2006, 08h38
  4. Réponses: 4
    Dernier message: 03/11/2005, 16h16
  5. [Jacob] gérer deux versions de Word installées
    Par difdaf dans le forum Documents
    Réponses: 2
    Dernier message: 16/07/2004, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo