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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

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