Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#2

AW: LoadStringW & nBufferMax > 255?

  Alt 26. Nov 2010, 16:53
Diese Warnung steht da, da das Genannte passieren kann, wenn man einen zu kleinen Puffer übergibt (dein p), als man behauptet (deine 255).



PS: Die paar Byte passen auch auf den Stack.
Ist wesentlich schneller, als erst über den Speichermanager zu gehn.
Delphi-Quellcode:
var
  Temp: array[0..1023] of WideChar;
begin
  if LoadStringW(hInstance, ResID, @Temp, Length(temp)) <> 0 then
    Result := Temp
  else
    Result := '';
end;
oder man nimmt den String selber als Puffer, statt des p.
Delphi-Quellcode:
begin
  SetLength(Result, 1024);
  SetLength(Result, LoadStringW(hInstance, ResID, PChar(Result), Length(Result));
end;
Oder du versucht mal direkt auf die Resource zuzugreifen.
Zitat von nBufferMax:
The size of the buffer, in characters. The string is truncated and null-terminated if it is longer than the number of characters specified. If this parameter is 0, then lpBuffer receives a read-only pointer to the resource itself.
Dieses aufrufen, die Länge erfahren und dann über SetString und den erhaltenen Pointer direkt auslesen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Nov 2010 um 16:56 Uhr)
  Mit Zitat antworten Zitat