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

Visual C++ Discussion :

Générer une chaine GUID ou CLSID


Sujet :

Visual C++

  1. #1
    bruce-willis
    Invité(e)
    Par défaut Générer une chaine GUID ou CLSID
    Bonjour,

    Voici mon code

    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
    #include <string>
     
    std::wstring GetNewGUID()
    {
    	USES_CONVERSION;
    	CString strGUID = ""; 
    	GUID sessionGUID = GUID_NULL;
    	HRESULT hr = CoCreateGuid(&sessionGUID);
    	if (sessionGUID != GUID_NULL && HRESULT_CODE(hr) == RPC_S_OK)
            strGUID.Format("{%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}", 
    		sessionGUID.Data1, sessionGUID.Data2, sessionGUID.Data3,
    		sessionGUID.Data4[0], sessionGUID.Data4[1], sessionGUID.Data4[2], sessionGUID.Data4[3],
    		sessionGUID.Data4[4], sessionGUID.Data4[5], sessionGUID.Data4[6], sessionGUID.Data4[7],
    		sessionGUID.Data1, sessionGUID.Data2, sessionGUID.Data3,
    		sessionGUID.Data4[0], sessionGUID.Data4[1], sessionGUID.Data4[2], sessionGUID.Data4[3],
    		sessionGUID.Data4[4], sessionGUID.Data4[5], sessionGUID.Data4[6], sessionGUID.Data4[7]);
    	return A2BSTR(strGUID);
    }
     
    int main()
    {
    	return 0;
    }
    En fait, GetNewGUID() est une fonction que j'ai piquée sur des forums mais ça marche pas

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ce truc utilise MFC d'une manière parfaitement inutile.
    Utiliser la fonction StringFromCLSID().
    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.

  3. #3
    bruce-willis
    Invité(e)
    Par défaut
    Quelle en-tête alors pour ta fonction?

    Et si on continue avec ma fonction précédemment, qu'est-ce qui cloche plus précisemment?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Alors, la fonction précédente:
    • Elle utilise MFC.
    • Elle suppose que tu compiles en "ANSI"/Multi-byte et pas en Unicode (elle devrait utiliser des TCHAR à la place).
    • Elle utilise les vieilles macros de conversion de ATL/MFC (les nouvelles sont des classes C++ plus "safe").
    • Le test sur le HRESULT est inutilement élaboré, un simple SUCCEEDED() suffirait.

    PS: Pour éviter une allocation de mémoire, tu peux aussi utiliser StringFromGUID2() en lui passant un buffer de 40 WCHARs en paramètre...
    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. #5
    bruce-willis
    Invité(e)
    Par défaut
    StringFromGUID2 semble me convenir mais j'ai pas besoin de tous ces paramètres à entrer
    C'est pour cela que j'ai cherché cette fonction qui génère tout simplement un GUID à utiliser

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    "tous" ces paramètres?
    StringFromGuid2 demande juste un GUID et un buffer avec sa taille!

    Si tu veux une wstring, c'est simple:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    std::wstring GetNewGUID()
    {
    	std::wstring ret = L"";
    	GUID sessionGUID = GUID_NULL;
    	HRESULT hr = CoCreateGuid(&sessionGUID);
    	if(SUCCEEDED(hr)) {
    		WCHAR szGUID[40];
    		if(StringFromGUID2(sessionGUID, szGUID, 40) > 0)
    			ret = szGUID;
    	}
    	return ret;
    }
    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. #7
    bruce-willis
    Invité(e)
    Par défaut


    Oui c'est ça !
    Au niveau des #include?

  8. #8
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Salut voici un peu de code très pratique où les constructeurs font le travail.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    GUID sessionGUID = GUID_NULL;
    HRESULT hr = CoCreateGuid(&sessionGUID);  // New GUID 
    CComBSTR bstrGUID(sessionGUID);  // GUID en BSTR
    CStringW wstrGUID(bstrGIUD);   // Si on est famillier avec les CString donc en UNICODE
    CStringA astrGUID(bstrGUID);  // sinon en ANSI
    CString strGUID(bstrGUID);  // Switch entre ANSI ou UNICODE
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    GUID sessionGUID = GUID_NULL;
    HRESULT hr = CoCreateGuid(&sessionGUID);
     
    // j'ai ma chaine en une ligne de code
    CString strGUID(CComBSTR(sessionGUID)); // Facile non!!!!
    Vu que tu fais soit de l'ATL ou MFC tu as ce sample

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Attention, le premier code de Gabrielly nécessite une version pas trop obsolète de Visual (comprendre: Pas Visual 6)
    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.

Discussions similaires

  1. Générer une chaine aléatoire
    Par java_fun dans le forum Général Java
    Réponses: 24
    Dernier message: 07/11/2018, 23h03
  2. [PHP 5.2] Générer une chaine sql via un tableau associatif
    Par beegees dans le forum Langage
    Réponses: 5
    Dernier message: 11/04/2010, 19h36
  3. Générer une chaine aléatoire
    Par Thomus38 dans le forum C++
    Réponses: 5
    Dernier message: 21/07/2008, 22h45
  4. générer une chaine et la vérifier
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 09/10/2007, 21h11
  5. Besoin de générer une chaine aléatoire
    Par warsky dans le forum Langage
    Réponses: 7
    Dernier message: 01/12/2005, 19h34

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