![]() |
Lokale string Variable als Zwischenspeicher benötigt
D10.4.2
Kann mir mal bitte jemand erklären, warum ich da unten die lokale ZwischenVariable s brauche, statt das gleich dem Result zuzuweisen? Weise ich das dirket zu, bekomme ich nicht den Klartextnamen des Benutzers aus dem AD, sondern den Loginnamen den GetCurrentUserLoginName liefert.:?
Delphi-Quellcode:
function TMainFormLogic.GetCurrentUserLoginName : string;
const cnMaxUserNameLen = 254; var sUserName : string; dwUserNameLen : DWord; begin dwUserNameLen := cnMaxUserNameLen-1; SetLength(sUserName, cnMaxUserNameLen); GetUserName(PChar(sUserName), dwUserNameLen); SetLength(sUserName, dwUserNameLen - 1); Result := sUserName; end; function TMainFormLogic.GetCurrentUserData: string; var outUserInfo : TADSIUserInfo; ADCallResult : Boolean; CurrentUserName : string; CurrentDomainName : string; s : string; begin Result := ''; try Result := GetCurrentUserLoginName; CurrentUserName := ActiveDirectoryClient.GetCurrentUserName; CurrentDomainName := ActiveDirectoryClient.GetCurrentDomainName(CurrentUserName); ADCallResult := ActiveDirectoryClient.GetUserInfo(CurrentDomainName, CurrentUserName, outUserInfo); if ADCallResult then begin s := Copy(outUserInfo.UserName, 1, length(outUserInfo.UserName)) + ' / ' + Copy(outUserInfo.Description, 1, length(outUserInfo.Description)) ; Result := s; end; except On e:Exception do log.SendException(cCategory, 'Fehler bei ActiveDirectory Aufruf: ' + e.Message, e); end; end; |
AW: Lokale string Variable als Zwischenspeicher benötigt
Das sollte sich doch im Debugger zeigen. Vermutlich ist ADCallResult aus irgendeinem Grund False.
Besser wäre es auf jeden Fall so:
Delphi-Quellcode:
So wird Result := GetCurrentUserLoginName; nur ausgeführt, wenn es auch benötigt wird. Und wofür das Copy, wenn du ohnehin den ganzen String verwendest?
if ADCallResult then
Result := outUserInfo.UserName + ' / ' + outUserInfo.Description else Result := GetCurrentUserLoginName; |
AW: Lokale string Variable als Zwischenspeicher benötigt
Außerdem ist cnMaxUserNameLen total falsch.
* erstmal 254 statt 256 * und wird -1 statt +1 für die #0 Delphi-Strings haben zwar #0#0 eingebaut, aber dennoch könnte es somit einen Speicherüberlauf von 2 Chars / 4 Bytes geben. Zitat:
|
AW: Lokale string Variable als Zwischenspeicher benötigt
Zitat:
Innerhalb der Methode war Result das, was ich erwartet hätte, auf der Aufruferseite war der String dann aber immer leer oder so und ich weiß nicht warum. Daher meine Lösung mit dem Copy. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz