AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TByteSOAPArray vs. TByteDynArray

Ein Thema von Samashy · begonnen am 26. Jul 2021 · letzter Beitrag vom 26. Jul 2021
Antwort Antwort
Benutzerbild von Samashy
Samashy

Registriert seit: 20. Feb 2004
Ort: Cottbus
127 Beiträge
 
Delphi 10.4 Sydney
 
#1

TByteSOAPArray vs. TByteDynArray

  Alt 26. Jul 2021, 11:46
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:
const content: TByteDynArray
und in 64
Code:
const content: TByteSOAPArray
Mit dieser Funktion:
Code:
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;
hatte ich bisher die Datei in das Array geschrieben.

Wie muss ich diese Funktion umschreiben?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TByteSOAPArray vs. TByteDynArray

  Alt 26. Jul 2021, 11:55
TByteSOAPArray
Wenn ich das richtig sehe, musst Du nur den Rückgabetypen ändern.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Samashy
Samashy

Registriert seit: 20. Feb 2004
Ort: Cottbus
127 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TByteSOAPArray vs. TByteDynArray

  Alt 26. Jul 2021, 12:03
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
---------------------------
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TByteSOAPArray vs. TByteDynArray

  Alt 26. Jul 2021, 12:06
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?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Samashy
Samashy

Registriert seit: 20. Feb 2004
Ort: Cottbus
127 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TByteSOAPArray vs. TByteDynArray

  Alt 26. Jul 2021, 12:24
Nein leider nicht, mit Streams habe ich noch nichts gemacht.

es knallt in der While-Schleife bei der zweiten Runde

Code:
 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;
Speziell bei der Zeile:
Code:
 BlockRead(F, pTemp^, BytesToWrite , BytesRead );
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TByteSOAPArray vs. TByteDynArray

  Alt 26. Jul 2021, 12:53
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?
  Mit Zitat antworten Zitat
Benutzerbild von Samashy
Samashy

Registriert seit: 20. Feb 2004
Ort: Cottbus
127 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TByteSOAPArray vs. TByteDynArray

  Alt 26. Jul 2021, 14:51
Danke, habe auf Int64 umgestellt

Werde mich aber zusätzlich mal mit FileStream beschäftigen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz