MEGET mærkelig fejl med string

Tags:    delphi

<< < 12 > >>
Jeg er kommet ud for en meget mærkelig fejl med en string som indeholder stien til ens brugers account billede (f.eks. frøen, anden eller et custom billede). Det jeg gør er at læse AppData stien fra registry. Mit variabel ser nu sådan ud: PathToPicture:= C:\\Documents and Settings\\All Users\\Application Data. Derefter til føjer jeg \\Microsoft\\User Account Pictures\
Nu ser variablen sådan her ud:
C:\\Documents and Settings\\All Users\\Application Data\\Microsoft\\User Account Pictures\
Så bruger jeg en funktion som finder brugernavnet der er logget ind. Variabel er nu lig: C:\\Documents and Settings\\All Users\\Application Data\\Microsoft\\User Account Pictures\\Jonas-Bl

Så tilføjer jeg til sidst .bmp. Men det kommer ikke med?! Hvordan kan det være. Tænkte at stringen måske var for lang. Men skrev jeg manuelt mit brugernavn ind virkede det fint. Hvad i alverden er der galt??


-----------------------------
Jonas (Decko)
http://decko.1go.dk/blog



15 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
hmm det lyder mystisk.. umiddelbart kan jeg ikke komme på nogen god ide.. det kan være at bitmappen er gemt i et andet format som tbitmap ikke kender men jeg tør ikke sige noget med sikkerhed her

Jeppe Johansen
Jeppesoftware@hotmail.com



Hej Jonas ,,

Jeg satte mig lige og legede lidt med det og prøvede at åbne 'user account pictures' billedet i paint og gemme det igen uden at ændre, gæt hvordan det kom til at se ud. Jeps lige som det delphi loader. Dvs. at M$ endnu engang vil have deres ting i fred :(. Desværre.

M.v.h. Johnny Rasmussen



Kunne ikke lade være med at kommentere på det her:

'C:\\Documents and Settings\\All Users\\Application Data\\Microsoft\\User Account Pictures\\Jonas-Bl'#0'.bmp'

#0 bruges til at afslutte strengen i de fleste winapi funktioner. En delphi streng har angivet længden, og har derfor ikke brug for at være null-termineret. Men en delphi streng skal have #0 efter det sidste tegn så den kan konverteres direkte til en PChar til winapi. Den slutter altså først et tegn efter den angivet længde. #0 burde altså være EFTER sidste tegn i sUserName. GetUserName sætter dwUserNameLen til hvor meget strengen fylder - altså en mere end længden pga. #0 der kommer efter strengen. Der skulle således ikke have stået SetLength(sUserName, dwUserNameLen); men SetLength(sUserName, dwUserNameLen-1);

Tilsyneladene bliver der taget højde for det hele to gange i
dwUserNameLen := cnMaxUserNameLen - 1;
den ene som null tegnet fylder er der jo allerede taget højde for i cnMaxUserNameLen = 254 da den maksimale længde egentligt er 255 tegn



Ja, studsede også lidt over det med maxlength. Skal nok til at lukke den her tråd, havde helt glemt det. Nogen der vil have points??


-----------------------------
Jonas (Decko)
http://decko.1go.dk/blog



Nå, så snupper jeg dem selv ;).



<< < 12 > >>
t