Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J’ai un petit problème. La fonction « GetUserNameA » ne retourne pas le nom de l’utilisateur sur toutes les machines. C'est-à-dire dans des machines elle fonctionne et dans d’autres non.
D’avance merci pour votre aide
Cdt,
Hors ligne
Le deuxième paramétre a envoyé est la longueur du champ récupérant le nom d'utilisateur.
Est ce qu'il est suffisamment taillé? Et du cout, est ce que ça se plante pas sur les cas de nom les plus long?
Hors ligne
d'abord merci pour ta réponse
oui il est suffisamment taillé et le système ne se plante pas
Hors ligne
Bonjour,
toutes les machines ont-elles la même config (OS,...) ? La(Les)quelle(s) ?
Quelle est la version de PB ?
Dernière modification par Geo (14-05-2013 09:52:06)
Hors ligne
Quand je parlais de "ça se plante" je parlais au sens ou l'appel à GetUserNameA ne retournais rien.
Donc oui est ce que tu est sur les même version OS/PB.
Au niveau de la déclaration de ta fonction externe, est ce que ton code comporte ou non "Ansi" dans l'alias? Ca peux être nécessaire selon ton cas de figure.
Dernière modification par Van (14-05-2013 09:59:21)
Hors ligne
y a peut être pas de nom d'utilisateur configuré sur certaines machines ?
Hors ligne
Oui j'ai le mème OS sur toutes les machine.
Oui j'ai bien un username crée dans toutes les machine.
Oui le code comporte "Ansi" dans l'alias
FUNCTION long GetUserNameA(ref string UserName, ref ulong BufferLength) LIBRARY "ADVAPI32.DLL" ALIAS for "GetUserNameA;Ansi"
Je travaille sur la version PB11.5
Hors ligne
Si PB11.5, je préconise l'utilisation de GetUserNameW à la place de GetUserNameA, et supprimer le ";ansi" dans l'alias.
PB 11.5 est unicode (depuis PB10) et a tout à gagner d'utiliser des fonctions d'API en unicode, ça évite une conversion de chaîne inutile.
Pour ne pas modifier trop de code existant, on peut mettre "alias for GetUserNameW" en laissant GetUserNameA comme nom de fonction mais ça risque de tromper les programmeurs qui passeront derrière.
Sinon sans planter est-ce que le code de retour de GetUserNameA est 0 (erreur) ou différent de 0 (succès) ?
Hors ligne
Salut,
Moi, je fais comme ça :
uLong lul_Size String ls_Username lul_Size = 256 ls_Username = Space(256) This.GetUserNameW(ls_Username, lul_Size)
..ça a toujours marché, je touche du bois, en même temps je suis jamais tombé sur un nom d'utilisateur très long...
Je suis d'accord avec seki sur la préférence aux appels en unicode (W) plutôt qu'ansi (A).
(En plus il y a pas de fonction SpaceA)
Dernière modification par PowerDestroyer (25-06-2013 09:21:26)
Hors ligne
Bonjour,
Pour des questions de lisibilité du code
Hors ligne