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 :

OleCheck et EOleSysError


Sujet :

C++Builder

  1. #1
    Membre habitué Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Points : 158
    Points
    158
    Par défaut OleCheck et EOleSysError
    Bonjour,

    J'ai un programme qui utilise des serveurs DCOM. Pour me connecter à ces serveurs, j'utilise la fonction CreateRemote(). Cette fonction prend en paramètre l'@IP du serveur.

    Quand le PC distant n'est pas allumé, j'ai une erreur HR CHECK qui s'affiche à l'ecran. Cette erreur est lancée par OleCheck. Voici la doc:
    OleCheck est utilisé pour envelopper de nombreuses routines COM, pour que si la routine échoue, l'utilisateur pourra la gérer dans l'exception déclenchée.

    Si ECode est inférieur à zéro, OleCheck déclenche une exception EOleSysError contenant le code d'erreur.
    J'aimerais que cette erreur n'apparaisse pas à l'ecran, mais je ne sais pas comment faire.

    De plus, je voudrais attraper l'exception lancée, mais je n'y arrive pas.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		//Création du serveur de calcul distant 
    		WideString addrServ = serverAddr;
    		TCOMIObjetRun objetDistant;
    		try
    		{
    			objetDistant = CoObjetRun::CreateRemote(addrServ.c_bstr());
    		}
    		catch(Comobj::EOleSysError &eOE)
    		{
    			texte = "";
            }
    Je ne passe jamais dans le catch, mais je ne comprend pas pourquoi.
    Je n'ai pas trouvé de doc correcte concernant la fonction CreateRemote.

    Quelqu'un peut-il m'aider?

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    je ne vais pas résoudre ton problème en profondeur, mais je pense que si tu n'attrapes pas l'erreur, c'est que ton catch ne récupère pas le bon objet. Es-tu sûr que la fonction envoie bien une erreur Comobj::EOleSysError et pas CoObjetRun::EOleSysError.

    De toutes façons, tu peux toujours faire un catch (...) { qui doit normalement tout attrapé. Si ça ne marche pas, alors le problème est plus compliqué.

  3. #3
    Membre habitué Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Points : 158
    Points
    158
    Par défaut
    Le catch(...) n'apporte rien. Je n'attrape l'exception.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    J'ai trouvé deux trucs intéressants pour toi dans la doc de C++ builder :

    Tout d'abord ça :
    Description

    Le code de débogage inclus dans la gestion des appels COM dans C++Builder appelle DebugHlpr_PROMPT pour afficher une boîte message permettant à l'utilisateur de décider s'il faut déclencher une exception, ignorer le problème détecté ou basculer sur le débogueur. Cette routine est appelée quand des assertions échouent ou quand un appel d'interface renvoie un code d'erreur, sauf si NO_PROMPT_ON_ASSERTE_FAILURE ou NO_PROMPT_ON_HRCHECK_FAILURE sont appelées.

    Le paramètre caption spécifie le libellé de la boîte message. Pour les échecs d'assertions, c'est "_ASSERTE:". “. Pour les erreurs renvoyées dans un HRESULT c'est "HRCHECK:". “.

    Le paramètre msg est un message donnant des détails sur le problème rencontré.

    DebugHlpr_PROMPT renvoie IDYES s'il faut déclencher une exception, IDNO si le problème doit être ignoré et IDCANCEL pour passer sur le débogueur.
    Et ça
    Les appels d'interface générés automatiquement testent si un code d'erreur a été renvoyé (HRESULT). Par défaut, quand une valeur d'erreur est renvoyée, une boîte message apparaît demandant s'il faut déclencher une exception. Définissez NO_PROMPT_ON_HRCHECK_FAILURE avant la compilation pour supprimer l'affichage de la boîte message. Quand NO_PROMPT_ON_HRCHECK_FAILURE est définie, une valeur d'erreur renvoyée déclenche une exception sans interaction utilisateur.
    J'espère que ça peut t'aider. Il faudrait donc définir NO_PROMPT_ON_HRCHECKFAILURE, mais ça je sais pas comment.

  5. #5
    Membre habitué Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Points : 158
    Points
    158
    Par défaut
    Ça m'aide complètement!

    J'ai définis NO_PROMPT_ON_HRCHECK_FAILURE dans les options du projet->"chemin et definitions"->"definitions conditionnelles".

    Maintenant, je n'ai plus la fenêtre et j'arrive à attraper l'exception Comobj::EOleSysError.

    Bref, c'est exactement ce que je voulais.

    Tu les as trouvés où tes infos? Parce que je trouve pas grand chose dans l'aide.

    En tout cas, merci beaucoup grouff!

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Bon à savoir pour les définitions conditionnelles, ça m'aidera si j'ai des erreurs dans ce genre.
    Sinon les infos je les ai trouvé sur le fichier d'aide de lC++ builder.

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

Discussions similaires

  1. Objet COM EOleSysError
    Par DuffNut dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 05/09/2013, 19h30
  2. Exception EOleSysError sous Seven
    Par juju1988 dans le forum Langage
    Réponses: 4
    Dernier message: 27/07/2012, 10h29
  3. "coinitialize n'a pas été appelé" EOleSysError
    Par XavierHWT dans le forum C++Builder
    Réponses: 0
    Dernier message: 07/05/2009, 09h39
  4. EoleSysError classe non enregistrée
    Par ManuBEI dans le forum Langage
    Réponses: 1
    Dernier message: 18/11/2008, 17h50
  5. EoleSysError classe non enregistrée
    Par Daniel Magron dans le forum Delphi
    Réponses: 10
    Dernier message: 19/11/2006, 11h36

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