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

C++Builder Discussion :

Utilisation de SetErrorProc


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par d�faut Utilisation de SetErrorProc
    Bonjour, suis programme sous Borland C++ 5.0
    Suite � un evenement de FastSocket (NMStream), je cherche un exemple de code utilisant la procedure SetErrorProc (ScktComp.hpp> afin de capturer ESocketError par mon programme et non pas le gestionnaire windows.
    Merci.

  2. #2
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur C++\Delphi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par d�faut
    ScktComp c'est plut�t TServerSocket !
    Je ne pensais pas qu'il �tait consid�r� comme faisait pas du groupe Fast comme TNMFTP ou TNMStream

    Tu devrais avoir un OnError sur le TServerSocket ou TClientSocket
    ESocketError �tant provoqu� par ces deux derni�res classes (et sous classes comme TWinClientSocket, TWinServerClientSocket...)

    TNMStream encapsule TClientSocket ?
    ou c'est une utilisation que tu as coupl� toi m�me ?
    C++Builder 5 c'est un peu vieux, difficile de souvenir, cela a tellement chang� depuis
    ScktComp est conserv� pour compatibilit�, pendant une p�riode, les composants �tait d�sapprouv� par Borland

    En th�orie (selon la doc de XE3)

    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
    TSocketErrorProc OldSocketErrorProc; // une globale quelque part (idéalement, fait un objet singleton)
     
    //---------------------------------------------------------------------------
    void __fastcall /*TForm::*/MySocketErrorProc(int ErrorCode)
    // il n'est pas marqué en __closure donc en théorie pas besoin d'objet
    {
      // ton code ici
     
      if (OldSocketErrorProc)
        OldSocketErrorProc(ErrorCode); 
     
      // ton code possible ici aussi, à toi de voir
    }
     
    //---------------------------------------------------------------------------
    void InstallMySocketErrorProc()
    {
      OldSocketErrorProc := SetErrorProc(MySocketErrorProc);
    }
     
    #pragma startup InstallMySocketErrorProc
    //---------------------------------------------------------------------------
    Aide via F1 - FAQ - Guide du d�veloppeur Delphi devant un probl�me - Pensez-y !
    Attention Troll M�chant !
    "Quand un homme a faim, mieux vaut lui apprendre � p�cher que de lui donner un poisson" Confucius
    Mieux vaut se taire et para�tre idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la m�diocrit� !

    L'exp�rience, c'est le nom que chacun donne � ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par d�faut
    Non, j'utilise une simple liaison NMStrmclient vers un NMStrmServer pour le tranfert d'image.
    Si le server n'est pas connect�, j'ai un event windows qui s'affiche malgr� la gestion de Onclientconnectionfailed. (je fais NMClient->LastErrorN0=0);
    J'ai un event ESocketError = 10035 qui lui est g�r� par ScktComp.hpp.
    J'aimerais capturer cet ESocketError gr�ce � la fonction SetErrorProc, mais je n'ai pas d'exemple.
    SetErrorProc permet de supprimer le popup de windows et de le prendre en charge mais comment....

  4. #4
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur C++\Delphi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par d�faut
    Citation Envoy� par Grizou0 Voir le message
    Non, j'utilise une simple liaison NMStrmclient vers un NMStrmServer pour le tranfert d'image.
    Pourquoi ne pas le dire d�s le d�but

    Citation Envoy� par Grizou0 Voir le message
    J'ai un event ESocketError = 10035 qui lui est g�r� par ScktComp.hpp.
    J'aimerais capturer cet ESocketError gr�ce � la fonction SetErrorProc, mais je n'ai pas d'exemple.
    As-tu lu le code que j'ai fourni ?
    As-tu essayer de comprendre le code que j'ai fourni ?
    As-tu tenter d'essayer de remplir MySocketErrorProc avec le code que tu veux ?
    As-tu tenter de limiter l'appel � OldSocketErrorProc en fonction du ErrorCode, dans ton cas

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //---------------------------------------------------------------------------
    void __fastcall /*TForm::*/MySocketErrorProc(int ErrorCode)
    // il n'est pas marqué en __closure donc en théorie pas besoin d'objet
    {
      // ton code ici
     
      if (ErrorCode != 10035)
        if (OldSocketErrorProc)
          OldSocketErrorProc(ErrorCode); 
     
      // ton code possible ici aussi, à toi de voir
    }
    Faut faire un peu plus d'effort !

    Enfin, as-tu une Exception ou Notification du D�boggueur ?
    Aide via F1 - FAQ - Guide du d�veloppeur Delphi devant un probl�me - Pensez-y !
    Attention Troll M�chant !
    "Quand un homme a faim, mieux vaut lui apprendre � p�cher que de lui donner un poisson" Confucius
    Mieux vaut se taire et para�tre idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la m�diocrit� !

    L'exp�rience, c'est le nom que chacun donne � ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par d�faut
    Merci ShaiLeTroll
    Si je poste, c'est que j'ai longuement cherch�, mais merci tout de m�me pour le support.
    Malheureusement, le code n'a aucun effet et les sources sont tr�s rare.
    SetErrorProc n'est pas interpr�t� apparement.

    Par contre, suivant la doc Pas de Postit, j'ai trouv� la fonction FSocketWindow.
    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
     
    File *.h
    extern void __fastcall essai(void);
     
    File .Cpp
    //Code 
    void __fastcall TForm1::SendToServeur()
    {
    TMemoryStream *MS=new TMemoryStream();
    StreamLn(MS,"Hello");
     
    NMStrm->TimeOut=10000;
    NMStrm=ReportLevel=1;
    try
      {
      NMStrm->PosIt(MS); //Send message
       }
    catch(...)
      {
      Memo->Lines->Add("TimeOut"); //Display if no server connection
      }
    MS->free();
    }
     
    void __fastcall essai()
    {
    Form1->Memo->Lines->Add("Je suis ici");
    }
    //---------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {//Handle Erreur Socket sur procedure essai
    MNStrm->FSocketWindow=essai;
    }
    //---------------------------------------------------
    Dans ce cas, je n'ai pas d'affichage, donc �a ne passe pas dans ma proc�dure, par contre, je n'ai plus le MsgBox "erreur windows".
    (Je lance le soft hors de l'�diteur pour �viter l'interpr�tation du debugger.

    Me reste tout de m�me l'inconnue, comment capter un erreur Socket Windows et la traiter par mon soft.

  6. #6
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur C++\Delphi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par d�faut
    Citation Envoy� par Grizou0 Voir le message
    SetErrorProc n'est pas interpr�t� apparement.
    Tu n'aurais pas oubli� #pragma startup ?

    Tu utilises une version C++Builder vieille de plus de 10 ans avec des composants consid�r�s comme totalement obsol�tes,
    il est tr�s difficile de t'aider sur une version 5 alors que personnellement je travaille en version 17 !

    FSocketWindow normalement re�oit une WndProc qu'il est pr�f�rable de g�rer via AllocateHWnd, ton code me semble douteux !
    D'ailleurs, ce extern est inutile pour faire une "forward declaration"

    Si tu utilisais directement le TClientSocket et sa m�thode SendStream, cela serait bien plus facile de t'aider car ce composant existe encore !

    Moi, ce que je ne comprends pas c'est la d�pendance entre FastSocket et SetErrorProc de ScktComp !

    Il faudrait que tu lises le fichier source (en pascal, je suppose) de TNMStream pour analyser son fonctionnement !

    Sinon Borland C++ 5.0 ne pas confondre !
    Cet outil existe, c'est un IDE sans builder !
    un autre produit, plut�t con�u pour du C++ standard ou via OWL qui est l'anc�tre de la VCL !

    ici on parle de Borland C++Builder 5
    Aide via F1 - FAQ - Guide du d�veloppeur Delphi devant un probl�me - Pensez-y !
    Attention Troll M�chant !
    "Quand un homme a faim, mieux vaut lui apprendre � p�cher que de lui donner un poisson" Confucius
    Mieux vaut se taire et para�tre idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la m�diocrit� !

    L'exp�rience, c'est le nom que chacun donne � ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par d�faut
    C'est bien du borland c++ 5 builder (2002 il me semble).
    Avec #pragma ou en l'incluant de CreateForm, rien n'y fait.
    Mais je dois probablement zapper quelque chose. Par exp�rience et � force d'insister, je vais trouver.
    Je posterai la soluce si je trouve.
    Merci

  8. #8
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    D�tails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par d�faut
    FeedBack:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {//Handle Erreur Socket sur procedure essai
    MNStrm->FSocketWindow=essai;
    }
    Dans ce cas, je viens de m'appercevoir que mon socket ne fonctionne plus

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    R�ponses: 8
    Dernier message: 08/06/2005, 15h57
  2. R�ponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    R�ponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    R�ponses: 2
    Dernier message: 04/04/2002, 16h01
  5. R�ponses: 2
    Dernier message: 20/03/2002, 23h01

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