Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bandlaufwerk / Streamer ansprechen unter Delphi. (https://www.delphipraxis.net/56533-bandlaufwerk-streamer-ansprechen-unter-delphi.html)

shifter 11. Nov 2005 16:51

Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
 
Ich habe es noch ein mal anders versucht :
Delphi-Quellcode:
Var buf  : Pointer;
    re   : boolean;
    bow  : dword;
    bor  : dword;
    lcm  : pointer;
    inf  : thandle;
    tot  : dWord;
    tot1  : dWord;
begin

  TapeHandle := OPENDRIVE_READ;
  Security.nLength             := SizeOf( TSecurityAttributes );
  Security.bInheritHandle      := False;
  Security.lpSecurityDescriptor := nil;

  SetTapePosition ( TapeHandle, 4, 0, 0,0, False );

  buf := VirtualAlloc( nil, 512, MEM_COMMIT, PAGE_READWRITE );
  inf := CreateFile('C:\mt.exe',GENERIC_READ,0,
              @Security,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

  tot := 0;
  tot1:= 0;
  bor := 1;
  While bor>0 do Begin
    lcm := nil;
    re := ReadFile(inf,buf,512,bor,lcm);
    If bor>0 Then Begin
      lcm := nil;
      re := WriteFile( TapeHandle, buf, bor, bow, lcm);
      Inc( tot, bor );
      Inc( tot1,bow );
    End;
  End;
  ShowMessage('Read :'+inttostr(tot)+chr(10)+'Write :'+IntToStr(tot1));

  WriteTapeMark( TapeHandle, 0, 1, False );

  CloseHandle( inf );
  CloseDrive;

  VirtualFree( buf, 512, MEM_DECOMMIT );
Es sieht garnicht so schlecht aus.
Es wird auf dem Band aufgenohmen aber ab den Offset 4 jest 512 Bytes gibts differenz zur orginal file. Die differenz ist 8 Byte Lang und wiederholt sich regelmessig jede 512 Bytes.

Und am Ende Bekomme ich noch ein mechtiges Delphi Abstürz. vermutlich geht hier um den speicher ( immer noch )

shifter 11. Nov 2005 18:00

Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
 
Der Fehler am Ende, kommt ungefähr nach 2-5 sek und lautet :

bds.exe - bordbk90N.dll
Internal Error IMP-2627

nach par mal ok kommt

Acces violation adress xy in module 'bordbk90N.dll'. Read of adresse xy.

:wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall:

Flocke 11. Nov 2005 19:20

Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
 
1. Microsoft empfiehlt ~100 Blocks am Anfang einer Partition zu überspringen, da manche Streamer dort eigene Daten ablegen, du solltest also jeweils ein
Delphi-Quellcode:
SetTapePosition(TapeHandle, TAPE_LOGICAL_BLOCK, 0, 100, 0, false);
vor das Lesen und Schreiben setzen.

2. Du MUSST bei ReadFile als 5. Parameter nil angeben, ansonsten meint Windows, dass du überlappende I/O-Operationen durchführen willst. Das dürfte deine verzögerten Abstürze verursachen.

3. Du solltest den Speicher mit
Delphi-Quellcode:
VirtualFree(buf, 0, MEM_RELEASE);
wieder freigeben.

shifter 12. Nov 2005 13:18

Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
 
Hi, Danke .

Wede sofort in angriff nehmen.

Weist du vieleicht wo kann mann überprüfen den eingelegten band typ ?
Also bei anderen back.prog. zeigt der mir an welchen band tüp ich gerade in laufwerk habe,
zb 50GB oder 24 GB ...

Gruss
seba

shifter 12. Nov 2005 14:23

Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
 
Zitat:

Zitat:

Zitat von Flocke
1. Microsoft empfiehlt ~100 Blocks am Anfang einer Partition zu überspringen, da manche Streamer dort eigene Daten ablegen, du solltest also jeweils ein
Delphi-Quellcode:
SetTapePosition(TapeHandle, TAPE_LOGICAL_BLOCK, 0, 100, 0, false);
vor das Lesen und Schreiben setzen.

Wenn das Band ist Gelöscht dann kann ich nicht weiter nach hinten vorspullen wie der letzte verwende Block, in falle direckt nach dem EraseTape ist das Block Nr. 1. Somit wenn ich setpos auf block 100 mache bleibt er bei block nr. 1 stehen.

Zitat:

2. Du MUSST bei ReadFile als 5. Parameter nil angeben, ansonsten meint Windows, dass du überlappende I/O-Operationen durchführen willst. Das dürfte deine verzögerten Abstürze verursachen.

3. Du solltest den Speicher mit
Delphi-Quellcode:
VirtualFree(buf, 0, MEM_RELEASE);
wieder freigeben.

Exackt habe ich so gemacht, Delphi hängt sich auf, bds process muss über taskmanager beendet werden.

schade, mir ist schon schlecht :wall: ;

seba

shifter 14. Nov 2005 02:27

Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
 
Hi,

ich glaube ich hab das Problemm gelöst, es funktioniert.

Aber zurück zum den Roport.

Das erste Report von DriveParameters hat angezeigt da das laufwerk nicht unterstützt Compression,
nach dem ich ein bespieltes band mit anderen software eingelegt habe und den test nochmal durchgeführt habe ist folgendes ergebis gekommen :

  • Drive information:
    ECC: No
    Compression: Yes
    DataPadding: No
    ReportSetmarks: Yes
    DefaultBlockSize: 512
    MaximumBlockSize: 65536
    MinimumBlockSize: 1
    MaximumPartitionCount: 2

Siehe Compression.

:gruebel:
seba

joehd 19. Aug 2009 11:43

Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
 
Der Thread ist ja aus 2005 hat zufällig jemand daran weiter geschrieben und eine halbwegs brauchbare Lösung
Wäre schon nett sonst muß ich alles nochmal machen und mich auch mit den Problemen auseinandersetzen :-(

Grüße Joachim


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 Uhr.
Seite 4 von 4   « Erste     234   

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