![]() |
Alternative für String Assign
Obwohl möglich funktioniert das so nicht.
Delphi-Quellcode:
var
BufferSize: dword; sBuffer: string; //.... sBuffer.assign(BufferSize, 0); Zitat:
gruss |
AW: Alternative für String Assign
Korrekt, ein
Delphi-Quellcode:
gibt es nicht. Was willst du denn damit erreichen? Eventuell das hier?
string.Assign
Delphi-Quellcode:
sBuffer := string.Create(#0, BufferSize);
|
AW: Alternative für String Assign
Zitat:
Zitat:
Wenn das so funktioniert ? EDIT: Ich denke mal das ist ein einfaches
Delphi-Quellcode:
sBuffer := IntToStr(BufferSize);
gruss |
AW: Alternative für String Assign
Zitat:
Für ältere Delphi-Versionen geht auch
Delphi-Quellcode:
sBuffer := StringOfChar(#0, BufferSize);
oder gleich ein simples
Delphi-Quellcode:
SetLength(sBuffer, BufferSize); // die Nullen kommen dann von ganz allein
|
AW: Alternative für String Assign
Zitat:
Ich werde es mal testen denn ich sehe schon meine Annahme geht so nicht. gruss |
AW: Alternative für String Assign
Was hast du denn überhaupt vor?
|
AW: Alternative für String Assign
Zitat:
Setlength funktioniert nicht oder aber ich habe schon vorher ein Problem. Error Code 998. Wenn ich versuche den Speicher mit MoveMemory zu verschieben.
Delphi-Quellcode:
Muss das nochmal prüfen.
MoveMemory(pGlobalBuffer, @sBuffer, BufferSize);
gruss |
AW: Alternative für String Assign
Hier mal mein Code
Ich versuche die PNG Datei Binär zu lesen.
Delphi-Quellcode:
function TAnimatePng.FLof(hFile: THandle): DWORD;
var dwFileSize: DWORD; begin dwFileSize := 0; if hFile <> 0 then begin if GetFileType(hFile) = FILE_TYPE_DISK then begin dwFileSize := GetFileSize(hFile, nil); if dwFileSize = INVALID_FILE_SIZE then dwFileSize := 0; end; end; result := dwFileSize; end;
Delphi-Quellcode:
function TAnimatePng.FSeek(hFile: THandle; PosByte: DWord): LongInt;
var li: integer; begin li := PosByte; Result := 0; if SetFilePointer(hFile, li, nil, FILE_BEGIN) < 0 then Result := GetLastError(); end;
Delphi-Quellcode:
function TAnimatePng.FGet(hFile: THandle; var sBuffer: string): LongInt;
var ByttesReaded: DWORD; LenBuf: DWORD; begin Result := 0; if hFile <> 0 then begin ByttesReaded := 0; LenBuf := Length(sBuffer); if LenBuf <> 0 then begin if ReadFile(hFile, sBuffer, LenBuf, ByttesReaded, 0) = false then Result := GetLastError(); end; end; end;
Delphi-Quellcode:
function TAnimatePng.FGetAt(hFile: THandle; PosByte: DWORD; var sBuffer: string): LongInt;
var ErrCode: LongInt; begin ErrCode := 0; ErrCode := FSeek(hFile, PosByte); if ErrCode = 0 then ErrCode := FGet(hFile, sBuffer); result := ErrCode; end;
Delphi-Quellcode:
gruss
BufferSize := FLof(hFileIn) - anih.offset - sizeof(anih) + 1;
SetLength(sBuffer, BufferSize); // ########### Der Anfang if FGetAt(hFileIn, anih.offset - 1, sBuffer) = S_OK then begin // sBuffer 2 laden Global := GlobalAlloc(GMEM_MOVEABLE or GMEM_NODISCARD, BufferSize); if Global <> 0 then begin pGlobalBuffer := GlobalLock(Global); if Assigned(pGlobalBuffer) then begin MoveMemory(pGlobalBuffer, @sBuffer, BufferSize); if CreateStreamOnHGlobal(Global, False, pImageStream) = S_OK then begin if GDIP_CreateBitmapFromStream(pImageStream, hImage) = S_OK then begin GDIP_DrawImageRectI(Graphics, hImage, anih.Width, 0, anih.Width * anih.Frame - anih.Width, anih.Height); GDIP_DisposeImage(cardinal(hImage)); end; pImageStream := nil; end; GlobalUnlock(Cardinal(pGlobalBuffer)); end; GlobalFree(Global); end; end; |
AW: Alternative für String Assign
Wieso benutzt du als Buffer einen string? Das kann doch nur schief gehen.
|
AW: Alternative für String Assign
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 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 by Thomas Breitkreuz