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++ Discussion :

Un peu d'aide sur la class string


Sujet :

C++

  1. #21
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut Ouai ca j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IASAPI_API std::string _HB(CBlob const & blob);
    jsais pas si ca va beaucoup t'éclairer. CBlob est une classe qui sert de wrapper pour un buffer binaire. Dailleurs _HB a deux signatures différentes puisqu'elle permet de passer de CBlob à string et inversement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IASAPI_API CBlob _HB(std::string hex);

  2. #22
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    La question va peut-être te paraître stupide (mais je m'en fout: si le ridicule tuais, je serais mort depuis longtemps ), mais, si j'ai bien compris, le but de cette fonction est... d'obtenir sous forme de chaines utilisant la notation hexadécimale, les valeurs d'un buffer et inversément

    Dés lors, ne pourrais tu, tout simplement, pas obtenir un résultat similaire sans passer par la fonction de la DLL

    Je me rend bien compte que cela relativise l'intérêt de la DLL, étant donné que cela signifie réinventer la roue pour quelque chose d'existant (et de théoriquement testé), mais cela te permettrait de contourner le problème d'ABI différentes
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #23
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut Non malheureusement
    en fait j'utilise massivement une fonction de l'API qui prend en parametre, entre autres, une référence à un CBlob et je veux récupérer la chaine hexa correspondant à ce CBlob. Me passer de la classe définie dans l'API m'obligerait à me passer de la seule fonction de l'API que j'utilise réellement.

  4. #24
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    A vrai dire, je te proposais de te passer de la fonction, et non de la classe... Quoi que, le problème est bel et bien similaire: idéalement, CBlob étant - sauf avis contraire - une classe avec tout ce qui en découle, la DLL ne devrait pas renvoyer d'élément de ce type vers l'application qui l'utilise (cf tous les messages précédents)...

    Mais ceci dit, j'ai personnellement la conviction (même si cela n'engage que moi) qu'il vaut parfois mieux "réinventer la roue" (dans ton cas, il s'agirait de recréer une classe CBlob et les différentes fonctions que tu utilise) que de persister à vouloir utiliser quelque chose d'existant dont il apparaît à l'usage que ce n'est pas adapté du fait des restrictions que cela impose...

    En effet, ce que tu écrivais plus haut est tout à fait juste: un code de départ "crade" impliquera une manière "crade" de coder ce qui en dépend.

    Dans cette optique, et parce qu'un bon ouvrier utilise normalement de bons outils, la meilleur décision à prendre - pour difficile qu'elle puisse paraître - me semble être de virer les "mauvais" outils
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #25
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut Je suis bien d'accord avec toi
    Simplement si je réécris une classe CBlob à ma façon (c'est pas dit que ce soit moins crade ), il faudrait également que je réécrive par exemple cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void sendAPDU (	unsigned char cla, unsigned char ins,
    			unsigned char p1, unsigned char p2,
    			CBlob const & data,  unsigned long le,
    			CBlob &response, unsigned short &sw12);
    qui envoie des commandes à une smartcard. Je n'ai pas les compétences pour écrire ca. Et d'une manière générale la quasi totalité des objets de l'API utilise CBlob qui en est presque une brique de base. Donc de ce coté la je suis coincé. Merci quand même pour tes recommandations, j'aurais quand même appris des choses aujourd'hui c déjà ça.

  6. #26
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut ah j'ai mal lu
    Tu parlais de la fonction et pas de la classe :$. Ben peut-être que c'est possible jvais regarder mais je ne sais pas comment est représenté le buffer au sein de cette classe, c'est assez opaque et je risque de générer plus de bugs que d'en résoudre

  7. #27
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par KindPlayer Voir le message
    Simplement si je réécris une classe CBlob à ma façon (c'est pas dit que ce soit moins crade ), il faudrait également que je réécrive par exemple cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void sendAPDU (	unsigned char cla, unsigned char ins,
    			unsigned char p1, unsigned char p2,
    			CBlob const & data,  unsigned long le,
    			CBlob &response, unsigned short &sw12);
    qui envoie des commandes à une smartcard. Je n'ai pas les compétences pour écrire ca. Et d'une manière générale la quasi totalité des objets de l'API utilise CBlob qui en est presque une brique de base. Donc de ce coté la je suis coincé. Merci quand même pour tes recommandations, j'aurais quand même appris des choses aujourd'hui c déjà ça.
    Pas très compliqué - l'API smart card de Windows est relativement simple.

    Bon, d'ou elle vient cette DLL ? a la voir comme ça, il s'agit de quelque chose qui a été développé en interne. N'y a t-il pas moyen d'éviter l'utilisation de _HB, ou de redéfinir cette fonction ?

    Ceci dit, L'interface de CBlob ne doit pas être très compliquée. Un petit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::string to_hex(const CBlob& blob)
    {
      std::stringstream ss;
      for (std::size_t i=0; i<blob.length(); ++i)
      {
        ss << std::hex << std::setw(2) << std::setfill('0') << blob.get_byte(i);
      }
      return ss.str();
    }
    Je pré-suppose l'existence d'une fonction qui donne la taille du blob (CBlob::length() dans mon exemple) ainsi qu'un moyen pour récupérer le ième byte du blob (CBlob::get_byte(std::size_t) dans mon exemple). Mais de toute façon, il faut bien que CBlob ait une interface permettant de récupérer les informations coté client, non ?

    (Note: les identifiants dont le nom commence par un _ et une majuscule sont reservés par le standard C++ pour l'implémentation. Il n'est pas garanti qu'il n'existe pas un identifiant _HB défini par ton compilateur pour une raison quelconque. Raison de plus pour demander des modifications de la librairie).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  8. #28
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    En effet la classe CBlob dispose d'une méthode size() ainsi que d'une surcharge de [] permettant d'accéder au ième byte. En revanche pas de méthode du type data() permettant de récupérer la chaine hexa. Mais en m'inspirant de ton exemple jpeux essayer de bricoler un truc qui remplace _HB
    Merci

Discussions similaires

  1. Un peu d'aide sur une expression régulière particulier
    Par ruana dans le forum Général Python
    Réponses: 2
    Dernier message: 03/06/2007, 20h04
  2. [stl] questions sur la classe string
    Par r0d dans le forum SL & STL
    Réponses: 3
    Dernier message: 23/02/2007, 01h31
  3. Question facile sur la classe string
    Par MarOne dans le forum Langage
    Réponses: 9
    Dernier message: 20/04/2006, 15h28
  4. Aide sur POO :: Classe et liste d'objet
    Par Andry dans le forum Langage
    Réponses: 1
    Dernier message: 23/01/2006, 16h51
  5. svp un peu d'aide sur mon update, resumé simple en dessous
    Par hansaplast dans le forum Langage SQL
    Réponses: 11
    Dernier message: 14/11/2005, 11h14

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