[C/C++] GetUsername, les !$%$?% de pointeurs

GetUsername, les !$%$?% de pointeurs [C/C++] - Programmation

Marsh Posté le 04-03-2001 à 19:58:28    

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:

Reply

Marsh Posté le 04-03-2001 à 19:58:28   

Reply

Marsh Posté le 04-03-2001 à 20:08:19    

Apparemment t'es passé un peu brutalement de VB au C :)

Reply

Marsh Posté le 04-03-2001 à 20:16:10    

Effectivement :D
 
mais c'est sourtout l'API de windows qui me tue! :crazy:

Reply

Marsh Posté le 04-03-2001 à 21:54:48    

Une réponse serait aprécier vous savez!  :D

Reply

Marsh Posté le 04-03-2001 à 22:23:44    

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;  
}


---------------
http://www.cheata.net le site qui vous donne la banane!
Reply

Marsh Posté le 04-03-2001 à 22:50:40    

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

Reply

Marsh Posté le 04-03-2001 à 23:07:19    

tu remplaces  
LPDWORD ml=256;
par  
DWORD ml=256;

Reply

Marsh Posté le 04-03-2001 à 23:15:49    

Un grand merci a Verdoux et Roswell_  :)  
Qui sait où je pourait me trouver sans eux? :D

Reply

Marsh Posté le 04-03-2001 à 23:21:08    

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;  
}


---------------
Pipiru piru piru pipiru pi
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed