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.