![]() |
Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
Ich habe es noch ein mal anders versucht :
Delphi-Quellcode:
Es sieht garnicht so schlecht aus.
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 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 ) |
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: |
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:
vor das Lesen und Schreiben setzen.
SetTapePosition(TapeHandle, TAPE_LOGICAL_BLOCK, 0, 100, 0, false);
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:
wieder freigeben.
VirtualFree(buf, 0, MEM_RELEASE);
|
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 |
Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
Zitat:
schade, mir ist schon schlecht :wall: ; seba |
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 :
Siehe Compression. :gruebel: seba |
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. |
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