Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3200 connectés 

 


Dernière réponse
Sujet : [C/C++] GetUsername, les !$%$?% de pointeurs
n0mad Si tu aloues une chaine sur la pile d'une fonction, tu ne peux pas la renvoyer en valeur de retour.
 
Tu dois la créer sur le tas (avec malloc par exemple) mais tu auras ensuite à charge de la détruire ultérieurement.
 
Par contre, si tu utilises une CString (dans les MFC et qui possède un constructeur de copy) tu peux faire :
 
 
CString AvoirInfos ()  
{  
CString Nom;  
DWORD ml = 255;  
 
GetUserName (Nom.GetBuffer(ml),&ml); /* un pointeur sur un DWORD se caste en LPDWORD en principe */
 
Nom.ReleaseBuffer();  
return Nom;  
}

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
n0mad Si tu aloues une chaine sur la pile d'une fonction, tu ne peux pas la renvoyer en valeur de retour.
 
Tu dois la créer sur le tas (avec malloc par exemple) mais tu auras ensuite à charge de la détruire ultérieurement.
 
Par contre, si tu utilises une CString (dans les MFC et qui possède un constructeur de copy) tu peux faire :
 
 
CString AvoirInfos ()  
{  
CString Nom;  
DWORD ml = 255;  
 
GetUserName (Nom.GetBuffer(ml),&ml); /* un pointeur sur un DWORD se caste en LPDWORD en principe */
 
Nom.ReleaseBuffer();  
return Nom;  
}
Ventilo Un grand merci a Verdoux et Roswell_  :)  
Qui sait où je pourait me trouver sans eux? :D
verdoux tu remplaces  
LPDWORD ml=256;
par  
DWORD ml=256;
Ventilo Bon merci pour ta tentative d'aide mais ta manière bug,
mais elle a le mérite d'être plus imposante que la mienne :D  
 
bon mais voici les erreurs que j'ai lorsque je compile
 
pour la ligne "LPDWORD ml=256;" j'ai:  
initializing' : cannot convert from 'const int' to 'unsigned long *'
 
et pour "GetUserName (Nom,&ml);" j'ai:
'GetUserNameA' : cannot convert parameter 2 from 'unsigned long ** ' to 'unsigned long *'
 
pour la première erreur j'ai essayer:
LPDWORD ml= LPDWORD(256);
 
et sa ne me donnait pas d'erreur a la compile et pour la deuxième j'ai enlever le "&" tout compilait mais j'avait la même erreur qu'avec ma function a moi...:cry:
 
et pour MSDN je connait sa car c'est là que j'ai trouver la function GetUserName:sarcastic:

 

--Message édité par Ventilo--

Roswell_ tu connais msnd?
http://msdn.microsoft.com/library/ [...] /msdn1.htm
 
sinon:
BOOL GetUserName(
  LPTSTR lpBuffer,  // address of name buffer
  LPDWORD nSize     // address of size of name buffer
);
donc moi je ferais:
char* AvoirInfos ()  
{  
char *Nom=(char*)malloc(256*sizeof(char));  
LPDWORD ml=256;  
 
GetUserName (Nom,&ml);  
 
return Nom;  
}
Ventilo Une réponse serait aprécier vous savez!  :D
Ventilo Effectivement :D
 
mais c'est sourtout l'API de windows qui me tue! :crazy:
verdoux Apparemment t'es passé un peu brutalement de VB au C :)
Ventilo Bon la je suis dans en plein dans un gros probleme...
 
vous voyer j'essaie de savoir quel est le nom de lutilisateur loger (sa se dit?) avec la function GetUserName de l'api de windows. j'ai fait une function toute simple:
 
char* AvoirInfos ()  
{
 char Nom;
 LPDWORD ml;
 
 GetUserName (&Nom,ml);
 
 return &Nom;
}
 
mais sa marche pas.... je compille et je recoi une erreur de lecture/écriture mémoire...je suis sur a 80% que c'est la variable ml qui cause le problem parce que je ne lui donne pas de valeur, mais quand je lui donne la valeur 256 (UNLEN) j'obtine une erreur de converion de types....AU SECOUR  
 
Cela semblait si simple avan! (vive vb)
 
P.S
*:gun:
 :pt1cable:

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)