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 :

Convertir une chaîne de caractère en datetime


Sujet :

C++

  1. #41
    Membre averti
    Homme Profil pro
    C++, Java
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : C++, Java
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Par défaut
    Je vais tenter ça.
    Il existe déjà une seconde fonction dans l'appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CLdap::Put_INT_Attribut(IADs & pADs,BSTR sNomAttribut, int iValeurAttribut)
    Je vais en ajouter une troisième pour gérer un paramètre LARGE INTEGER

    Mais il me reste malgré tout à convertir mon FILETIME en LARGE_INTEGER de manière correct.
    Je vais reprendre toutes mes notes pour repartir sur cette piste.

    Merci encore une fois (de plus) pour votre aide

  2. #42
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 616
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CLdap::Put_INT_Attribut(IADs & pADs,BSTR sNomAttribut, int iValeurAttribut)
    C'est tout aussi ridicule comme signature, surtout avec du 32 bits et du 64 bits qui se balade.
    Ce 'int" on c'est même pas combien il a d'octet.

    Mais il me reste malgré tout à convertir mon FILETIME en LARGE_INTEGER de manière correct.
    Si vous avez comme valeur un FILETIME, mettez un FILETIME comme paramètre de cette fonction.
    Si les primitives LDAP ne veulent que du LARGE_INTEGER, faites la conversion à l'intérieur de la fonction.
    Comme ça, vous aurez plus de libertés sur le choix des méthodes que publie l'interface "IADs".

  3. #43
    Membre averti
    Homme Profil pro
    C++, Java
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : C++, Java
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Par défaut
    En effet, tant qu'à créer une nouvelle fonction, autant m'éviter cette étape de conversion.

    La fonction de iADS appelée par mon code est la fonction Put suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            virtual /* [id] */ HRESULT STDMETHODCALLTYPE Put( 
                /* [in] */ BSTR bstrName,
                /* [in] */ VARIANT vProp) = 0;
    Quel que soit le format de ma variable en entrée de ma fonction, il faut donc que je la convertisse en VARIANT

    Je vais tenter le coup avec la fonction InitVariantFromFileTime.
    A priori ça devrait en effet pouvoir se faire plus facilement.

  4. #44
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Le plus simple, c'est de faire une autre méthode qui prend un LARGE_INTEGER en troisième paramètre et pas cet horrible CString.

    Vous faites un code bien plus propre et bien plus simple en utilisant des COleVariant, comme l'indique @Médinoc.

    Je pense que c'est une fonction qui ne devrait pas faire plus de 5 lignes. (Je n'ai pas de MFC ni d'AD sous la main, désolé).
    Attention, il n'y a pas de type de variant pour LARGE_INTEGER... mais VT_I8 devrait probablement convenir.

    Sinon, il faudra utiliser VT_DATE, après avoir converti le FILETIME en COleDateTime.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #45
    Membre averti
    Homme Profil pro
    C++, Java
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : C++, Java
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Par défaut
    En fait j'ai créé une fonction CLdap:: Put_FT_Attribut à laquelle je fournis mon FILETIME en paramètre au lieu d'un CString.
    Maintenant dans cette fonction, il faut que je convertisse ce FILETIME en VARIANT, pour pouvoir utiliser la fonction IADs:: Put qui attend ce format en entrée. Et a priori la fonction InitVariantFromFileTime va me permettre de le faire.

    L'idéal aurait été de pouvoir faire comme un int, en utilisant var.intVal, mais il n'y a pas de var.ftVal ou équivalent.

  6. #46
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    Apparemment, InitVariantFromFileTime() fait le travail de convertir le FILETIME en VT_DATE, exactement ce qu'il fallait, je parie.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #47
    Membre averti
    Homme Profil pro
    C++, Java
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : C++, Java
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Par défaut
    Mais j'ai une erreur sur cette fonction :

    Error: identificateur "InitVariantFromFileTime" non défini :'(

    Pourtant cette fonction semble être une fonction de VARIANT, objet que je défini sans souci dans mon code. Donc il ne doit pas me manquer d'include...

  8. #48
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    RTFM:
    Citation Envoyé par MSDN
    Header PropVarUtil.h
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #49
    Membre averti
    Homme Profil pro
    C++, Java
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : C++, Java
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Par défaut


    Alors que Visual Studio ne m'affiche plus d'erreur après avoir ajouté l'include de la classe PropVarUtil.h, à la compile j'ai une erreur malgré tout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error LNK2019: symbole externe non résolu __imp__InitVariantFromFileTime@8 référencé dans la fonction "public: long __thiscall CLdap::Put_FT_Attribut(struct IADs &,wchar_t *,struct _FILETIME)" (?Put_FT_Attribut@CLdap@@QAEJAAUIADs@@PA_WU_FILETIME@@@Z)
    J'ai écrit ma fonction comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    HRESULT CLdap::Put_FT_Attribut(IADs & pADs,BSTR sNomAttribut, FILETIME fValeurAttribut)
    {
     
    	VARIANT var;
     
    	VariantInit(&var);
       	var.vt=VT_DATE;
     
    	HRESULT hr = InitVariantFromFileTime(&fValeurAttribut, &var);
     
       	return(pADs.Put(sNomAttribut,var));
     
    }
    Et a priori la fonction InitVariantFromFileTime ne veut pas fonctionner.

    Etant donné qu'il s'agit d'une fonction d'initialisation d'un VARIANT, j'ai tenté en supprimant les deux lignes d'initialisation au dessus, pensant que ça entrait en conflit, mais non. Pas mieux... :'(
    J'ai aussi tenté le coup en modifiant ma ligne de code :

    Mais pas mieux encore...

  10. #50
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 173
    Billets dans le blog
    4
    Par défaut
    Il s'agit d'une erreur de link, il doit te manquer une lib à lier à ton exécutable pendant l'édition de liens.
    Comme le montre la doc https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx tu as ajouté l'include c'est bien, faut aussi lier Propsys.lib
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #51
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    En d'autres termes, RTFM encore.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #52
    Membre averti
    Homme Profil pro
    C++, Java
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : C++, Java
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Par défaut
    J'avais bien cru comprendre qu'il me manquait une DLL nommée propsys.dll, mais je l'ai téléchargée et déposée dans le répertoire d'exécution de mon appli, avec les autres dll qu'elle utilisait déjà jusque là, mais ça ne suffit pas.

    RTFM, certes
    Mais je ne vois pas sur la page de la fonction InitVariantFromFileTime quoi que ce soit faisant référence à cette lib, et encore moins comment la "lier" à mon application...

  13. #53
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    Normalement la DLL est déjà là, supprime ce que tu as DL et ajoute la lib statique d'importation PropSys.lib aux options d'édition de liens du projet.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #54
    Membre averti
    Homme Profil pro
    C++, Java
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : C++, Java
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Par défaut
    Parles-tu d'un simple
    #include <Propsys.h>
    ?

    Car même avec ça, j'ai toujours le même message d'erreur.
    Je n'en peux plus du langage objet...

  15. #55
    Membre averti
    Homme Profil pro
    C++, Java
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : C++, Java
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Par défaut
    C'est bon, j'ai trouvé ça sur le site.

    Mais la conversion n'est pas bonne...
    La création du compte se fait dans l'AD, mais le champ accountExpires n'est pas valorisé correctement.

  16. #56
    Membre averti
    Homme Profil pro
    C++, Java
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : C++, Java
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Par défaut
    Le sujet peut être clos, j'ai solutionné mon problème.
    Vu l'aide que vous m'avez apporté, la moindre des choses était de vous en faire part

    En fait il restait une erreur toute conne.
    A la création de mon systemetime, je valorisais st.wYear, st.wMonth et st.wDay, mais il faut impérativement valoriser wMillesecond, wSecond etc... même si on veut les mettre à 0.
    Ma création de FILETIME était donc mauvaise.

    C'est corrigé, et ça marche.

  17. #57
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    C'est pour ça qu'il vaut mieux initialiser toute la structure à zéro:
    Et il y a probablement des façon plus "C++" de déclarer cela.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/04/2008, 17h36
  2. Convertir une chaîne de caractère (saisie dans un textbox) en décimal
    Par sab_etudianteBTS dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/09/2007, 21h17
  3. Convertir une chaîne de caractères XML en Node
    Par Invité dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/07/2007, 14h06
  4. Réponses: 4
    Dernier message: 22/12/2006, 15h10
  5. Convertir une chaîne de caractères
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 13/11/2006, 17h25

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