![]() |
TByteSOAPArray vs. TByteDynArray
Hallo,
ich versuche ein bestehendes Tool auf 64Bit hochzuziehen. Das Tool füttert einen Restservice mit Dateien. In der 32Bit Variante forderte der Webservice:
Code:
und in 64
const content: TByteDynArray
Code:
Mit dieser Funktion:
const content: TByteSOAPArray
Code:
hatte ich bisher die Datei in das Array geschrieben.
function FileToByteArray( const FileName : string ) : TByteDynArray; stdcall;
const BLOCK_SIZE=1024; var BytesRead, BytesToWrite, Count : integer; F : FIle of Byte; pTemp : Pointer; begin AssignFile( F, FileName ); Reset(F); try Count := FileSize( F ); SetLength(Result, Count ); pTemp := @Result[0]; BytesRead := BLOCK_SIZE; while (BytesRead = BLOCK_SIZE ) do begin BytesToWrite := Min(Count, BLOCK_SIZE); BlockRead(F, pTemp^, BytesToWrite , BytesRead ); pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE); Count := Count-BytesRead; end; finally CloseFile( F ); end; end; Wie muss ich diese Funktion umschreiben? |
AW: TByteSOAPArray vs. TByteDynArray
|
AW: TByteSOAPArray vs. TByteDynArray
Sorry das habe ich vergessen zu schreiben:
Das habe ich probiert, aber dann kommt ein i/o 998 Fehler. --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt xxx ist eine Exception der Klasse EInOutError mit der Meldung 'E/A-Fehler 998' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- |
AW: TByteSOAPArray vs. TByteDynArray
An welcher Stelle knallt es denn? Ich glaube eher nicht, dass es am Rückgabetypen liegt. Hast Du mal versucht, die alten Pascal-Routinen (AssignFile, BlockRead, etc.) durch Streams zu ersetzen?
|
AW: TByteSOAPArray vs. TByteDynArray
Nein leider nicht, mit Streams habe ich noch nichts gemacht.
es knallt in der While-Schleife bei der zweiten Runde
Code:
Speziell bei der Zeile:
while (BytesRead = BLOCK_SIZE ) do
begin BytesToWrite := Min(Count, BLOCK_SIZE); BlockRead(F, pTemp^, BytesToWrite , BytesRead ); pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE); Count := Count-BytesRead; end;
Code:
BlockRead(F, pTemp^, BytesToWrite , BytesRead );
|
AW: TByteSOAPArray vs. TByteDynArray
Ich versuche die Logik erst gar nicht zu verstehen, aber dass LongInt auf Windows immer 4 Byte sind (während Pointer halt entweder 4 oder 8 Byte sind) ist dir klar, oder?
|
AW: TByteSOAPArray vs. TByteDynArray
Danke, habe auf Int64 umgestellt
Werde mich aber zusätzlich mal mit FileStream beschäftigen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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