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 :

Connaitre la taille d'une variable pointée par un PWCHAR


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Points : 167
    Points
    167
    Par défaut Connaitre la taille d'une variable pointée par un PWCHAR
    Bonjour,

    Je développe actuellement une DLL qui doit interroger l'active directory. Comme j'utilise le header winldap.h, je suis obliger d'utiliser des PWCHAR. Mon problème est le suivant : Je n'arrive pas à "formater" correctement mes pwchar.
    Si je créé moi-même le PWCHAR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		PWCHAR filter  = L"telephoneNumber=3223342088";
    , la fonction search et l'active directory fonctionne correctement.
    Si je le créé à partir d'une variable reçue d'un programme qui appelle la DLL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		char filter2[40] = {0};
    		memcpy(filter2,"telephoneNumber=",20);
    		memcpy(filter2 + 16 , Num, sizeof(Num));
    Puis je transforme ce filter2 en PWCHAR. J'obtiens exactement la même chose à l'affichage, mais la fonction search utilisant ce filtre ne fonctionne pas.
    Je suppose que c'est un problème de taille du wchar_t vers lequel pointe le PWCHAR, mais je ne sais pas comment verrifier les tailles.

    J'espère ne pas être trop confus
    D'avance merci

    PS : Je travaille avec Visual Studio 2005

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Tu manipules les caractères à la main, et avec des pointeurs, ce qui impose en C++ de faire attention à plein de détails sur lesquels ils est facile de se planter : Allocation mémoire, mettre un 0 terminal (c'est une convention pour savoir où une chaîne s'arrête, qui fait que pour N caractères, il faut N+1 case mémoire)...

    Je te conseilles vivement d'utiliser des strings pour te simplifier la vie. Les entrées de http://cpp.developpez.com/faq/cpp/?page=strings devraient te donner quelques idées.

    Dans ton cas, le code se résumerait probablement à un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    wstring Num = L"3223342088";
    wstring maChaine = L"TelephoneNumber" + Num;
    laFonctionActiveDirectory(maChaine.c_str());
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Points : 167
    Points
    167
    Par défaut
    J'aimerais beaucoup pouvoir utiliser des string (ou de char) mais malheureusement la fonction ldap_search nécessite un PWCHAR comme filtre.
    Je reçois le Num sous forme d'un char d'ailleurs
    Merci tout de même.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Comme j'ai essayé de te le dire, c_str() retourne un pointeur sur le buffer interne de la string, qui pour un wstring est un wchar_t const *, ce qui ne doit pas être loin de la définition de PWCHAR.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Points : 167
    Points
    167
    Par défaut
    A d'accord, je vais regarder à ça!
    Merci beaucoup!

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Points : 167
    Points
    167
    Par défaut
    J'ai essayé, de fait wstring et PWCHAR (si ce n'est le P du dernier) sont très proche, trop même car je me retrouve avec les même problème.
    Mais merci tout de même

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Il y a des chaînes en Unicode d'autre en ascii, c'est le bordel.
    Je pense que wstring.s_ctr devrait faire l'affaire, une fois ce foutoir remis d'équerre.

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Points : 167
    Points
    167
    Par défaut
    De fait, le problème des UNICODE nous étaient apparu, j'ai d'ailleur du créer une fonction pour transformer correctement mes char en wchar (mbstowcs ne le faisant pas correctement, par contre une boucle avec mbtowc m'a permis de passer outre ce problème)
    En fait j'ai resolu mon problème en faisant un copiant mon filtre posant problème dans un filtre fonctionnant, et là, plus de problème!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(filter,filterSend,27);
    Ce sont certainement des caractères qui trainaient en bou de chaine qui me causaient des problèmes.
    Si j'avais utilisé dés le départs des wstring, je n'aurais certainement pas à faire cela, mais recommencer mon code juste pour ça, j'en ai pas vraiemnt envie (et je risque de me faire tuer vu le temps que je prends!)

    En tout cas, merci à tous!

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

Discussions similaires

  1. Comment savoir la taille d'une variable
    Par killerjeff dans le forum C++
    Réponses: 30
    Dernier message: 09/12/2005, 17h07
  2. Savoir la taille d'un fichier pointé par une URL
    Par jeje99 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 15/11/2005, 19h35
  3. connaitre la taille d'une image ?
    Par vbcasimir dans le forum Langage
    Réponses: 2
    Dernier message: 04/10/2005, 14h40
  4. [Reflection] Connaître le nom d'une variable ...
    Par dahwoud dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 09/08/2005, 15h37
  5. [C#] WinForm.Label : connaitre la taille d'une liste de char
    Par lord_paco dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/11/2004, 00h04

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