![]() |
Large_Integer SetFilePointerEx Error 183
Hier die Fortführung
![]() Ich habe jetzt GetFileSizeEx mit eingebunden Die Funktion dahingehend geändert
Delphi-Quellcode:
dementsprechend überall PosByte: Int64 definiert und den BufferSize angepasst. BufferSize: Int64;
function TAnimatePng.FSeek(hFile: THandle; PosByte: Int64): LongInt;
var li: TLargeInteger; // oder Int64 begin li := PosByte; Result := 0; if SetFilePointerEx(hFile, li, nil, FILE_BEGIN) <> 0 then Result := GetLastError(); end; Kommt immer der gleiche Fehler Error 183 EDIT: Denke mal das Problem liegt hier
Delphi-Quellcode:
if SetFilePointerEx(hFile, li, nil, FILE_BEGIN) <> 0 then
result ist aber Bool
Delphi-Quellcode:
if SetFilePointerEx(hFile, li, nil, FILE_BEGIN) = false then
hoffe mal das es so stimmt. War wohl irgendwie überarbeitet gestern Nacht. LOL. gruss |
AW: Large_Integer SetFilePointerEx Error 183
Delphi-Quellcode:
Solltest du nicht machen, da
if SetFilePointerEx(hFile, li, nil, FILE_BEGIN) <> 0 then
Result := GetLastError();
Delphi-Quellcode:
im Erfoglsfall tatsächlich undefiniert sein bzw. noch den Status eines alten API Aufrufs zurückgeben kann.
GetLastError
|
AW: Large_Integer SetFilePointerEx Error 183
Äh:
Code:
Das:
Return value
If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError.
Delphi-Quellcode:
ist also falsch. Du musst auf Null testen.
if SetFilePointerEx(hFile, li, nil, FILE_BEGIN) <> 0 then
Result := GetLastError(); |
AW: Large_Integer SetFilePointerEx Error 183
Ich danke für eure Hilfe aber jetzt weis ich gar nichts mehr.
auf = False, oder auf = 0, oder auf = <> 0 gruss |
AW: Large_Integer SetFilePointerEx Error 183
Kommt drauf an, was du machen willst. Willst du auf den Fehlschlag reagieren auf 0.
Zitat:
|
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
Delphi-Quellcode:
if SetFilePointer(hFile, li, nil, FILE_BEGIN) <> 0 then
gleicht error 183. SetFilePointerEx Rückgabe = BOOL
Delphi-Quellcode:
if SetFilePointerEx(hFile, li, nil, FILE_BEGIN) = false then
Was soll da jetzt falsch sein? gruss |
AW: Large_Integer SetFilePointerEx Error 183
Ah. Das ist der Krampf mit den unterschiedlichen Definitionen von Wahrheitswerten von Delphi und WinAPI. Was ist denn Fehler 183 überhaupt?
|
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
Zitat:
@Emil: Kannst du mal mehr Code zeigen? |
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
Ich öffne die Datei auf diese weise
Delphi-Quellcode:
if FOpen(PWideChar(wsFile), 0, 0, hFileIn) = 0 then
begin
Delphi-Quellcode:
Hilft das ?
function TAnimatePng.FOpen(FileName: PWideChar; AccessMode: DWORD; ShareMode: DWORD;
var hFile: THandle): DWORD; var AccessIs: DWORD; ShareIs: DWORD; FlagAndAttribute: DWORD; begin AccessMode := min(max(AccessMode, 0), 2); //0 Nur lesend öffnen. if AccessMode = 0 then AccessIs := GENERIC_READ // 1 Nur zum schreiben öffnen. else if AccessMode = 1 then AccessIs := GENERIC_WRITE // 2 Zum Schreiben und lesen öffen else AccessIs := GENERIC_READ or GENERIC_WRITE; // Kohärenz zwischen 1-4 ShareMode := min(max(ShareMode, 1), 4); // 1 Verweigerter Lese/Schreibzugriff. if ShareMode = 1 then ShareIs := 0 // 2 Verweigerter Schreibzugriff else if ShareMode = 2 then ShareIs := FILE_SHARE_READ // 3 Verweigerter Lesezugriff else if ShareMode = 3 then ShareIs := FILE_SHARE_WRITE // 4 Vollerzugriff else ShareIs := FILE_SHARE_READ or FILE_SHARE_WRITE; if hFile = INVALID_HANDLE_VALUE then FlagAndAttribute := FILE_ATTRIBUTE_NORMAL or FILE_FLAG_WRITE_THROUGH else FlagAndAttribute := FILE_ATTRIBUTE_NORMAL; hFile := CreateFile(FileName, AccessIs, ShareIs, nil, OPEN_ALWAYS, FlagAndAttribute, 0); if hFile = INVALID_HANDLE_VALUE then begin Result := GetLastError(); hFile := 0; exit; end; Result := 0; end; gruss |
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
![]()
Delphi-Quellcode:
folgendes:
OPEN_ALWAYS
Zitat:
Edit: Warum machst du das ganze Gedöhns eigentlich manuell mit der WinAPI und verwendest nicht
Delphi-Quellcode:
?
TFileStream
|
AW: Large_Integer SetFilePointerEx Error 183
[QUOTE=Zacherl;1365342]
Zitat:
![]()
Delphi-Quellcode:
folgendes:
OPEN_ALWAYS
Zitat:
Edit: Zitat:
Denn auch hier wird der selbe Fehler generiert. Ignorieren oder was tun? Das ist die Frage. LOL EDIT: Zitat:
Hab da noch nicht viel mit gemacht. ;) gruss |
AW: Large_Integer SetFilePointerEx Error 183
Er will die VCL nicht einbinden. Und dazu zählen für ihn auch die nicht sichtbaren Klassen.
|
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
Würde TFileStream verwenden wenn ich damit mehr Erfahrung hätte. Wüsste jetzt nicht das TFileStream ein THandle zurück liefert. Und wie ich solche dinge damit behandeln sollte
Delphi-Quellcode:
BufferSize := FLof(hFileIn) - anih.offset - sizeof(anih) + 1;
Der sinn des ganzen ist, eine APNG Classe zur Verfügung zu stellen ohne 1000 Units einer mitunter nicht funktionierenden Library einzubinden. Ich bin gern unabhängig von fremden Komponenten und mit den Aufwand diese alle einzubinden. Das ist ein Hobby von mir und ich teile gern. gruss |
AW: Large_Integer SetFilePointerEx Error 183
Tut es, aber nur intern, davon bekommst du nichts mit, weil es in der TFileStream Klasse gekapselt wird. Aber, ich glaube, man kann kann das handle über eine Property abfragen.
|
AW: Large_Integer SetFilePointerEx Error 183
Das Problem ist NICHT
![]() ![]()
Delphi-Quellcode:
-Funktion fälschlicherweise den alten Error Code von
Seek
![]()
Delphi-Quellcode:
umsteigen, da es für deinen rein lesenden Anwendungszweck die deutlich bessere Wahl ist.
OPEN_EXISTING
Wenn die RTL bzw.
Delphi-Quellcode:
ok ist, dann wäre dies auf jeden Fall die allereinfachste Möglichkeit. Das eigentliche Datei-Handle wird vom Stream weggekapselt, aber das solltest du eigentlich auch gar nicht benötigen. Btw.
TFileStream
Delphi-Quellcode:
unterstützt (zumindest in Delphi 10.1) auch ein
TFileStream
Delphi-Quellcode:
mit 64-Bit Offset, wobei das wohl tatsächlich bei dir nicht von Relevanz ist.
Seek
|
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
Zumal der Code dadurch übersichtlicher wird. Alleine schaffe ich das nicht. gruss |
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
Denn ich muss die geänderten Geschwindigkeiten in das APNG hinein schreiben. gruss |
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
|
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
EDIT: Wenn Interesse besteht könnte man ja einen neuen Thread aufsetzen der sich mit dem TFileStream befasst. Wäre auch unterumständen Interessant für andere Community Mitglieder ;) gruss |
AW: Large_Integer SetFilePointerEx Error 183
Dazu gibt es bestimmt in Netz Tutorials.
|
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
Wenn ich alles im Netzt suche brauche ich nicht hier Angemeldet zu sein oder? Zumal das dann andere davon auch profitieren könnten. gruss |
AW: Large_Integer SetFilePointerEx Error 183
Würde ich so nicht sagen.
Die Forenmitglieder sind ja nicht dein persönliches Tutorial. Foren sind da um Fragen zu speziellen Problemen zu stellen, nicht um komplette Themen zu lernen ;) TFileStream ist auch nicht wirklich schwer zu benutzen. Es gibt sicher Tutorials aber ich denke man kann da im Zweifelsfall auch allein ganz gut zurecht kommen wenn man sich die Klasse mal anschaut und ein bisschen ausprobiert. |
AW: Large_Integer SetFilePointerEx Error 183
Verständnisfragen sind hier immer willkommen. Meine Tutorials sind aus meiner Neugier entstanden.
|
AW: Large_Integer SetFilePointerEx Error 183
Im Grunde ist
Delphi-Quellcode:
recht simpel: Der Constructor ist das Äquivalent zu
TFileStream
![]() ![]()
Delphi-Quellcode:
,
Seek
![]()
Delphi-Quellcode:
und
Read
![]()
Delphi-Quellcode:
. Die Parameter sind ebenfalls recht ähnlich.
TFileStream.Size
|
AW: Large_Integer SetFilePointerEx Error 183
Will mich jetzt nicht hier rumstreiten. Sei's drum.
Definitiv ist aber mit dem Stream in welcher weise er auch generiert wird etwas nicht in Ordnung. Muss noch was ackern und analysieren hab ja sonst nix zu tun. siehe Pic Zitat:
Aber andere dürfen ihre Themen nicht ausleben ok kein Problem für mich. :cheers: wird jetzt OT: gruss |
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
Muss mich damit mal beschäftigen auch wenn es nicht gerade von Erfolg gekrönt ist. gruss |
AW: Large_Integer SetFilePointerEx Error 183
Ich habe mich jetzt mal drangegeben.. Bisher sieht es so aus.
Delphi-Quellcode:
FileStream.Read füllt den sBuffer nicht der als TBytes definiert ist.
//if FOpen(PWideChar(wsFile), 0, 0, hFileIn) = 0 then
FileStream := TFileStream.Create(wsFile, fmOpenRead); if FileStream.Handle <> 0 then begin DC := CreateIC('DISPLAY', nil, nil, nil); ImgHDC := CreateCompatibleDC(DC); hDIB := SKAERO_CreateDIBSection(ImgHDC, anih.Width * anih.Frame, anih.Height, 32); SelectObject(ImgHDC, hDIB); if GDIP_CreateFromHDC(ImgHDC, Graphics) = OK then begin BufferSize := FileStream.Size - anih.offset - sizeof(anih) + 1; SetLength(sBuffer, BufferSize); FileStream.Seek(anih.offset - 1, soFromBeginning); FileStream.Read(sBuffer, BufferSize); //BufferSize sollte in Ordnung sein da kleiner wie FileStream.Size //if FGetAt(FileStream.Handle, anih.offset - 1, sBuffer) = S_OK then //begin gruss |
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
Delphi-Quellcode:
FileStream.Read(sBuffer[0], BufferSize);
|
AW: Large_Integer SetFilePointerEx Error 183
Zitat:
grusss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 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