Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Falsche Reihenfolge der Laufwerke! (https://www.delphipraxis.net/55996-falsche-reihenfolge-der-laufwerke.html)

100nF 30. Okt 2005 09:24


Falsche Reihenfolge der Laufwerke!
 
hallo zusammen,

ich habe schon überall gesucht und nichts gefunden!
ich bin schon fast am verzweifeln. :cry:

also ich habe die komponente TCDRip und die Komponente TCDDB. nun habe ich eine combobox in der die CD-Laufwerke aufgelistet werden.
wenn ich nun ein laufwerk auswähle, wird bei den zwei Komponenten TCDRip und TCDDB das laufwerk festgelegt, und die tracks müssten in einer listview aufgelistet werden. Das funktioniert allerdings nicht richtig.

Das Problem habe ich schon rausgefunden: Bei der Komponente TCDRip haben die Laufwerke nicht die gleiche Reihenfolge wie die Kompo TCDDB. Bei der TCDDB ist die Reihenfolge Standard, also die Laufwerksbuchstaben sind nach dem Alphabet sortiert.

Bei der Komponente TCDRip wird allerdings nicht mit dem Laufwerksbuchstaben gearbeitet, sondern mit der property CDRomNum (Integer). Da aber die Reihenfolge vertauscht ist, kann ich nicht sagen E:\ = 0 , F:\ = 1 , G:\ = 2.

Die Kompo TCDRip hat aber noch die property CDRomName. Ich kann z.B. CDRip.CdRomNum auf 0 stellen, und dann mit CDRip.CDRomName die Laufwerksbeschreibung auslesen (z.B. "PHILIPS CDRW/DVD CDD5263")

nun müsste ich aus dieser information den Laufwerksbuchstaben herausfinden, und ich weiss nicht ob und wie es geht.
also von "PHILIPS CDRW/DVD CDD5263" müsste ich z.B. auf "G:\" kommen.

ich hoffe ihr versteht mein problem und könnt mir helfen!! :bounce1:

Liebe Grüsse aus der Schweiz
urbanbruhin

Garfield 30. Okt 2005 14:16

Re: Falsche Reihenfolge der Laufwerke!
 
Zitat:

Zitat von urbanbruhin
Bei der Komponente TCDRip wird allerdings nicht mit dem Laufwerksbuchstaben gearbeitet, sondern mit der property CDRomNum (Integer). Da aber die Reihenfolge vertauscht ist, kann ich nicht sagen E:\ = 0 , F:\ = 1 , G:\ = 2.

Bei der BASSCD.DLL ist es ähnlich. Da werden die Laufwerke auch mit Ziffern identifiziert. Den Laufwerksbuchstaben erhält man dort mit der Funktion BASS_CD_GetDriveLetter. Vielleicht gibt es in der TCDRip etwas entsprechendes.

Nachtrag: In der CDRip_DLL.pas steht:

Delphi-Quellcode:
    TCDROMParams = packed record
        lpszCDROMID            : array[0..255] of char;  // CD-ROM ID, must be unique to index settings in INI file
Das könnte es sein?

100nF 30. Okt 2005 18:19

Re: Falsche Reihenfolge der Laufwerke!
 
Zitat:

Zitat von Garfield
Bei der BASSCD.DLL ist es ähnlich. Da werden die Laufwerke auch mit Ziffern identifiziert. Den Laufwerksbuchstaben erhält man dort mit der Funktion BASS_CD_GetDriveLetter. Vielleicht gibt es in der TCDRip etwas entsprechendes.

das habe ich auch schon gesucht, ich wurde allerdings nicht fündig...

Zitat:

Zitat von Garfield
Nachtrag: In der CDRip_DLL.pas steht:

Delphi-Quellcode:
    TCDROMParams = packed record
        lpszCDROMID            : array[0..255] of char;  // CD-ROM ID, must be unique to index settings in INI file
Das könnte es sein?

also sollte das heissen, dass in einer INI zu den Laufwerksbuchstaben die entsprechenden IDs zugeortnet sind?
also im Programmverzeichnis und beim ordner wo die komponente drin ist, habe ich nirgens eine INI gefunden...

gruss
urbanbruhin

marabu 30. Okt 2005 18:42

Re: Falsche Reihenfolge der Laufwerke!
 
Hallo Urban,

du erhöhst deine Chancen auf qualifizierte Hilfestellung, wenn du für Komponenten, die nicht zum Standard-Lieferumfang von Delphi gehören, einen URL angibst - ganz besonders bei freien oder Trial-Komponenten.

Grüße vom marabu

Garfield 30. Okt 2005 18:46

Re: Falsche Reihenfolge der Laufwerke!
 
Das weiß ich leider auch nicht. Vielleicht ist damit auch gemeint, dass CDex sie in seine INI schreibt. Ich habe noch nicht damit gearbeitet. Nach den Screnshots verwendet CDex nur die Bezeichnung des Laufwerkes. Aber es gibt dort auch eine CDDB-Abfrage. http://www.mpex.net/software/software.html?r=vp&id=cdex

Alternativ sollte es auch über
Delphi-Quellcode:
    TCDROMParams = packed record
        ...
   btTargetID      : BYTE;             // SCSI target ID
   btAdapterID      : BYTE;             // SCSI Adapter ID
   btLunID              : BYTE;             // SCSI LUN ID
gehen.

Garfield 30. Okt 2005 18:50

Re: Falsche Reihenfolge der Laufwerke!
 
Zitat:

Zitat von marabu
du erhöhst deine Chancen auf qualifizierte Hilfestellung, wenn du für Komponenten, die nicht zum Standard-Lieferumfang von Delphi gehören, einen URL angibst - ganz besonders bei freien oder Trial-Komponenten.

TCDRip ist eine Komponente, welche auf eine DLL aus dem CDex-Projekt zugreift.

Mit Google findet man sie zum Beispiel dort:

http://www.inspired.sk/delphi/compon...nent.php?ID=29
http://delphi.triger.com.pl/index.php?MENU_ID=6

100nF 30. Okt 2005 19:01

Re: Falsche Reihenfolge der Laufwerke!
 
Zitat:

Zitat von Garfield
Alternativ sollte es auch über
Delphi-Quellcode:
    TCDROMParams = packed record
        ...
   btTargetID      : BYTE;             // SCSI target ID
   btAdapterID      : BYTE;             // SCSI Adapter ID
   btLunID              : BYTE;             // SCSI LUN ID
gehen.

kannst du das mal genauer erklären?
was kann ich mit den drei Eigenschaften machen?

Danke für deine Hilfe!

Garfield 30. Okt 2005 19:19

Re: Falsche Reihenfolge der Laufwerke!
 
Klicke mal auf dieser Seite http://www.vcdeasy.org/modules.php?name=_ScreenShots auf das erste Bild. Es wird dann in einem anderen Fenster vergrößert dargestellt. Bei CD Writer siehst Du dann "2,1,0" vor dem Laufwerksnamen. Das sind diese IDs. Damit wird beschrieben, wo die Laufwerke hardwaremäßig im Rechner angeschlossen sind.

Leider kann ich es Dir nicht näher erklären, da ich jetzt auf Montage fahren muss.

100nF 30. Okt 2005 19:36

Re: Falsche Reihenfolge der Laufwerke!
 
danke für deine antwort, ich denke daraus lässt sich etwas machen!! :bounce1:

gruss
urbanbruhin

100nF 1. Nov 2005 10:48

Re: Falsche Reihenfolge der Laufwerke!
 
hi, ich nochmal

ich habe jetzt mal versucht, die drei eigenschaften (oder was auch immer) btTargetID, btAdapterID und btLunID auszulesen.

ich habe folgendes probiert:
Delphi-Quellcode:
var b: byte;
begin
  b := cdrip_dll.TCDROMParams.btAdapterID;
end;
Ergebnis:
Zitat:

[Fehler] Unit8.pas(790): Objekt oder Klassentyp erforderlich
irgendwas mache ich falsch, aber ich weiss einfach nicht was...

kann mir vielleicht jemand helfen?

thx

urbanbruhin

Garfield 10. Nov 2005 20:25

Re: Falsche Reihenfolge der Laufwerke!
 
Hallo, bin gerade wieder zu Hause eingetrudelt.

Zitat:

Zitat von urbanbruhin
ich habe jetzt mal versucht, die drei eigenschaften (oder was auch immer) btTargetID, btAdapterID und btLunID auszulesen.

Eine passende Erläuterung dazu finden, scheint schwierig.

Zitat:

Zitat von urbanbruhin
ich habe folgendes probiert:
Delphi-Quellcode:
var b: byte;
begin
  b := cdrip_dll.TCDROMParams.btAdapterID;
end;

So einfach geht das nicht. Du musst eine Variable vom Typ TCDROMParams vereinbaren und kannst dann die Werte verwenden. Zum Beispiel:
Delphi-Quellcode:
uses
  cdrip_dll;
var
  Parameter : TCDROMParams;
  b        : Byte;
begin
  b := Parameter.btAdapterID;
end;
Ein paar Beispiele fundest Du auch in http://www.delphipraxis.net/internal...ct.php?t=43931

100nF 12. Nov 2005 08:58

Re: Falsche Reihenfolge der Laufwerke!
 
hi,

also ich habe mal folgendes gemacht:
Delphi-Quellcode:
var
  Parameter : TCDROMParams;
  b        : Byte;
begin
  cdrip_dll.CR_GetCDROMParameters(parameter);
  b := Parameter.btAdapterID;
end;
sieht so aus als würde es funktionieren, jedoch weiss ich jetzt aber nicht was ich genau machen muss mit dem wert der variable b.

ist es möglich dass ich anhand vom wert der variable b den laufwerksbuchstaben ermitteln kann?

gruss
urbanbruhin

Garfield 12. Nov 2005 23:58

Re: Falsche Reihenfolge der Laufwerke!
 
Liste der Anhänge anzeigen (Anzahl: 2)
Moin,

jetzt sind es doch drei Stunden geworden, bis ich alle Units und das Projekt beisammen hatte. Dabei habe ich festgestellt, dass die Laufwerke von cdrip und cddb in derselben Reihenfolge aufgelistet werden. Die Beschreibung ist lediglich etwas anders.

Für cdrip sieht es so aus:

Delphi-Quellcode:
procedure lw_cdrip;
type
  TCDROMName = array[0..255] of char;
var
  i          : Byte;
  anz_CDRom  : Byte;
  text       : String;
  CDRomName  : TCDROMName;
  FParams    : TCDROMParams;
  TargetID,
  AdapterID,
  LunID      : Byte;
begin
  if CR_Init = CDEX_ERROR
  then begin
    ShowMessage('Fehler beim Initialisieren von CD Rip');
    Exit;
  end;

  Anz_CDRom := CR_GetNumCDROM;

  cmb_Drives_cdrip.Clear;

  for i := 0 to anz_CDROM - 1
  do begin
    CR_SetActiveCDROM(i);
    if CR_GetCDROMParameters(FParams)<> CDEX_ERROR
    then begin
      CDRomName1  := TCDROMName(FParams.lpszCDROMID);
      TargetID   := FParams.btTargetID;
      AdapterID  := FParams.btAdapterID;
      LunID      := FParams.btLunID;

      Text       := IntToStr(TargetID) + ':'
                   + IntToStr(AdapterID) + ':'
                   + IntToStr(LunID) + ' - '
                   + CDRomName;

      cmb_Drives_cdrip.Items.Add(Text);
    end;
  end;

  CR_SetActiveCDROM(0);
  cmb_Drives_cdrip.ItemIndex := CR_GetActiveCDROM;
end;
Für CDDB:

Delphi-Quellcode:
procedure lw_cddb;
var
  i          : Byte;
  anz_CDRom  : Byte;
  text       : String;
  CDRomName  : ShortString;
  TargetID,
  AdapterID,
  LunID      : Byte;
begin
  CDDB := TCDDB.Create(self);

  anz_CDRom := CDDB.CDRoms.CdRomCount;

  for i := 0 to anz_CDRom - 1 do
  begin
    CDRomName  := CDDB.CDRoms.CdRom[i].Description;
    TargetID   := CDDB.CDRoms.CdRom[i].Target;
    AdapterID  := CDDB.CDRoms.CdRom[i].HaID;
    LunID      := CDDB.CDRoms.CdRom[i].Lun;

    Text       := IntToStr(TargetID) + ':'
                 + IntToStr(AdapterID) + ':'
                 + IntToStr(LunID) + ' - '
                 + CDRomName;

    cmb_Drives_cddb.Items.Add(Text);
  end;

  cmb_Drives_cddb.ItemIndex := CDDB.CdRoms.ActiveCdRom;
end;
In den proceduren werden verschiedene ComboBoxen verwendet. Bei Auswahl des selben Laufwerkes sind die Werte für den ItemIndex identisch. Jedoch muss die Auswahl an beide Komponenten weitergeben werden.

Gesetzt werden sie mit:
Delphi-Quellcode:
CR_SetActiveCDROM(cmb_Drives.ItemIndex); // CD Rip
CDDB.ChangeActiveDrive(cmb_Drives.ItemIndex); // CDDB
Und ausgelesen mit:
Delphi-Quellcode:
cmb_Drives.ItemIndex := CR_GetActiveCDROM; // CD Rip
cmb_Drives.ItemIndex := CDDB.CdRoms.ActiveCdRom; // CDDB
Ach so, CDDB ist unter Var für die unit mit dem Typ TCCDB vereinbart. Die Units cdrip_dll und cddb stehen in den uses.

Wenn jetzt die Reihenfolge bei Dir nicht übereinstimmt, hast Du Fehler in Deinem Sourcen.

100nF 13. Nov 2005 12:09

Re: Falsche Reihenfolge der Laufwerke!
 
hallo Garfield,

vielen dank dass du dir so viel zeit dafür genommen hast!! :angel:

aaaaalso...
im grossen und ganzen funktioniert das nicht schlecht, aber es gibt da noch ein problem:
ich habe gemerkt, dass die datei WNASPI32.DLL eine grosse rolle spielt, ich glaube das hängt mit der TCDRip zusammen.
bei 2 von 3 PCs hat das programm funktioniert, aber bei einem leider nicht, und das hängt ganz sicher mit der WNASPI32.DLL zusammen.

bei den einen PCs befindet sich die datei WNASPI32.DLL schon im system32-verzeichnis, aber nicht bei allen. ausserdem gibt es verschiedene versionen von dieser DLL, die dann auch nicht das selbe ergebnis in deinem beispielprogramm erzielen. habe ich auch getestet.

kann man da irgendwas machen, dass bei JEDEM PC die selbe DLL (gleiche version, gleicher pfad) benutzt wird?
wenn sich eine WNASPI32.DLL im system32-verzeichnis befindet, und eine im Programmverzeichnis, welche wird dann benutzt?

ich denke wenn das problem mit der WNASPI32.DLL gelöst ist, dann kann ich dein beispielcode so anpassen, dass es dann auf jedem PC läuft.

gruss
urbanbruhin

Christian Seehase 13. Nov 2005 12:28

Re: Falsche Reihenfolge der Laufwerke!
 
Moin Urban,

wenn Du keinen Pfad angibst sollte zuerst im Programmverzeichnis gesucht werden.
Bei Windows 2000/XP kannst Du auch eine Datei mit dem Namen <Der Name Deines Programmes incl. exe>.local in das Programmverzeichnis legen, damit die in diesem Verzeichnis befindlichen DLLs geladen werden.
Hierzu kannst Du einfach eine leere Datei anlegen, die diesen Namen hat (Beispielname: Projekt1.exe.local)

100nF 13. Nov 2005 15:04

Re: Falsche Reihenfolge der Laufwerke!
 
hi,

gilt denn das nur für DLLs oder auch für andere dateien?

ich werds dann mal ausprobieren, jetzt habe ich aber leider grad keine zeit dafür...

urbanbruhin

Garfield 13. Nov 2005 16:03

Re: Falsche Reihenfolge der Laufwerke!
 
Zitat:

Zitat von urbanbruhin
vielen dank dass du dir so viel zeit dafür genommen hast!! :angel:

Das Problem hat mich auch interessiert, da ich bisher noch die Bass.DLL/BassCD.DLL zum Ermitteln der Laufwerke benutze. Ausserdem mag ich keine offenen Probleme und versuche zu helfen, wenn ich kann. Insbesondere weil ich weiß, wie frustrierend es ist, wenn niemand hilft bzw helfen kann.

Zitat:

Zitat von urbanbruhin
ich habe gemerkt, dass die datei WNASPI32.DLL eine grosse rolle spielt, ich glaube das hängt mit der TCDRip zusammen.
bei 2 von 3 PCs hat das programm funktioniert, aber bei einem leider nicht, und das hängt ganz sicher mit der WNASPI32.DLL zusammen.

SPTI wird unter Win2000/XP und ASPI unter Win9x/ME verwendet. Manche Programme kommen nicht mit SPTI zurecht, so dass dann auch ASPI installiert werden muss. Die TCDDB besitzt Units zur Verwendung von SPTI und ASPI, so dass es wirklich die TCDRip sein wird.

Die verschiedenen Versionen resultieren aus den verschiedenen Anbietern. So zum Beispiel von Adaptec und Nero.

Zitat:

Zitat von urbanbruhin
kann man da irgendwas machen, dass bei JEDEM PC die selbe DLL (gleiche version, gleicher pfad) benutzt wird?
wenn sich eine WNASPI32.DLL im system32-verzeichnis befindet, und eine im Programmverzeichnis, welche wird dann benutzt?

Dazu hat Christian bereits geantwortet. Die Möglichkeit der *.local kannte ich bisher nicht. Ich kannt nur die drei Möglichkeiten:

1. Die DLL liegt im Programmverzeichnis.
2. Die DLL liegt in %Windows%\System bzw. %Windows%\System32
3. Die DLL liegt woanders und ist registriert.

Zuerst wird aber meines Wissens immer im Programmverzeichnis gesucht.

Theoretisch sollte jede Version funktionieren. Bei mir hat es unter Win98SE mit Adaptec ASPI 4.60 und unter WinXP mit Adaptec ASPI 4.71 funktioniert.

Es sollte ausreichen wenn die 44 kb große wnaspi32.dll im Programmverzeichnis liegt.

Zitat:

Zitat von urbanbruhin
ich denke wenn das problem mit der WNASPI32.DLL gelöst ist, dann kann ich dein beispielcode so anpassen, dass es dann auf jedem PC läuft.

Mein Beispielcode beschränkt auf die Unit1.pas. Der Rest gehört zu den beiden Komponenten. Auf jeden Fall wünsche ich Dir viel Erfolg. :cheers:

Nachtrag:

Zum Laufwerksbuchstaben. Den bekommt man bei der TCDRip nicht. Bei der TCDDB ist seine Deklaration auskommentiert. Ob die entsprechende Funktion vorhanden ist, habe ich nicht geprüft. Im Prinzip sollte die Beschreibung des Laufwerkes ausreichend sein, so lange man den Buchstaben nicht weitergeben muss.

100nF 13. Nov 2005 17:10

Re: Falsche Reihenfolge der Laufwerke!
 
also ich jetzt mal das mit der *.local datei probiert.

nun habe ich aber das problem, dass bei der rechten combobox (also CDDB) in deinem beispielprogramm die drei zahlen vor dem laufwerksbuchstaben immer 0 sind, also 0:0:0.

ich dachte, wenn etwas nicht stimmt, dann wäre es die CDRip komponente und nicht die CDDB :gruebel:

ich benützt die WNASPI32.DLL von nero, version 2.0.1.59, 156kb gross.

weisst du was jetzt das problem sein könnte?

ich glaube mit der WNASPI32.DLL von Adaptec funktioniert es an einem pc, bin mir aber nicht ganz sicher.

Garfield 13. Nov 2005 20:22

Re: Falsche Reihenfolge der Laufwerke!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe kein Nero und mir deshalb die aktuelle wnaspi32.dll von http://www.nero.com/nero6/deu/WNASPI32.DLL.html heruntergeladen und ins Programmverzeichnis geschoben.

Unter XP werden unter CDRip wieder die IDs mit den Laufwerksbeschreibungen werden angezeigt. Unter TCDDB werden keine IDs zurückgegeben und anstelle der Laufwerksbeschreibungen gibt es die passenden Laufwerksbuchstaben. Anscheinend verwenden beide Komponenten unterschiedliche Funktionen, welche zwar bei den Adaptec-Treibern die selben Ergebnisse liefern aber nicht bei den von Nero.

Unter 98SE reicht die wnaspi32.dll von Nero nicht. Es wird die Originaldatei von Windows verlangt.

Jetzt müsstest Du Dir überlegen, wie Du die Laufwerke anzeigen lassen möchtest. Dementsprechend kannst Du die Werte anordnen. Zum Beispiel wie im Anhang.

Achso: Ich musste feststellen, dass die Adaptec-Treiber registriert werden müssen. Sonst gibt es Fehler.

Garfield 14. Nov 2005 09:30

Re: Falsche Reihenfolge der Laufwerke!
 
In der Darstellung der Adresse per TargetID, AdpaterID und LunID ist ein kleiner Fehler. Ich hatte die Darstellung in der deklarierten Reihenfolge vorgenommen. Beim Vergleich mit VCDEasy und Bass.Dll/BassCD.Dll habe ich festgestellt, dass dort die TargetID und AdapterID anders herum angezeigt werden.

Desweiteren kann es zu einer Fehlermeldung wegen inkompatibler Typen 'Array' und 'Char' kommen. Die Lösung gibt es unter http://www.delphipraxis.net/internal...ct.php?t=68064.

100nF 14. Nov 2005 18:16

Re: Falsche Reihenfolge der Laufwerke!
 
Zitat:

Zitat von Garfield
In der Darstellung der Adresse per TargetID, AdpaterID und LunID ist ein kleiner Fehler. Ich hatte die Darstellung in der deklarierten Reihenfolge vorgenommen. Beim Vergleich mit VCDEasy und Bass.Dll/BassCD.Dll habe ich festgestellt, dass dort die TargetID und AdapterID anders herum angezeigt werden.

also ist der fehler bei dem programm von deinem letztem anhang auch drin?
ich hoffe es, denn bei einem von 3 PCs passen die laufwerksbuchstaben nicht zu den laufwerksbeschreibungen.
kann es auch sein dass es fehler gibt wenn noch zusätzlich ein virtuelles laufwerk verwendet wird? sollte ja nicht oder?

das programm habe ich bei 3 PCs getestet:
PC 1: 1 CD-Laufwerk + 1 virtuelles laufwerk. funktionierte.
PC 2: 2 CD-Laufwerke. funktionierte.
PC 3: 2 CD-Laufwerke + 1 virtuelles laufwerk. funktionierte nicht, falsche reihenfolge.

die drei zahlen vor den laufwerksbezeichnungen waren jetzt nicht mehr 0:0:0, ausser bei einem einzigen laufwerk (ich glaube das war ein virtuelles), aber das ist ja shcon möglich dass diese so sein müssen, da die anderen 2 laufwerke nicht 0:0:0 anzeigten.

Garfield 14. Nov 2005 20:02

Re: Falsche Reihenfolge der Laufwerke!
 
Zitat:

Zitat von urbanbruhin
also ist der fehler bei dem programm von deinem letztem anhang auch drin?

Ja. Es ist aber nur ein Darstellungsfehler. Es muss der Befehl:
Delphi-Quellcode:
Text       := IntToStr(TargetID) + ':'
             + IntToStr(AdapterID) + ':'
             + IntToStr(LunID) + ' - '
             + CDRomName;
in
Delphi-Quellcode:
Text       := IntToStr(AdapterID) + ':'
             + IntToStr(TargetID) + ':'
             + IntToStr(LunID) + ' - '
             + CDRomName;
geändert werden und schon passt die Anzeige.

Zitat:

Zitat von urbanbruhin
kann es auch sein dass es fehler gibt wenn noch zusätzlich ein virtuelles laufwerk verwendet wird? sollte ja nicht oder?

Das könnte sein. Ich habe in meinem Notebook einen DVD-Brenner an 1:0:0. Dazu habe ich die Daemon Tools installiert. Zum Testen habe ich die Anzahl der virtuellen Laufwerke von eins auf vier (Maximum) erhöht. TCDRip findet nur das erste virtuelle Laufwerk. TCDDB findet das erste (2:0:0), dritte (2:2:0) und vierte (2:3:0) virtuelle Laufwerk. Wenn ich meine Source aus http://www.delphipraxis.net/internal...ct.php?t=68064 verwende, werden alle vier virtuellen Laufwerke gefunden. Anschließend findet die TCDDB aus dem anderen Programm auch alle Laufwerke.

In meinem anderen Projekt wurden Inkompatibilitäten in der SptiCD.pas wie folgt gefunden:
Delphi-Quellcode:
Zeile 90 -   Text := @DummyStr[0];
Zeile 95 -  StrPCopy( @buf[0], Format( '\\.\%s:', [
Zeile 191 -   StrPCopy( @buf[0], Format( '\\.\%s:', [
Zeile 362 -   StrPCopy( @buf2[0], Format( '\\.\%s:', [CdRoms.CdRom[i].DriveLetter] ) );
Zeile 408 -  DriveString := @inqData[0];
Vielleicht helfen diese kleinen Korrekturen bereits.

Die Änderung der Anzahl der virtuellen Laufwerke mit Daemon Tools bemerkt TCDRip erst nach dem Neustart. Die TCDDB bemerkt es sofort.

100nF 16. Nov 2005 17:31

Re: Falsche Reihenfolge der Laufwerke!
 
könntest du bitte noch den source von deinem letzten anhang anhängen?
da ist nämlich nur die exe und die DLLs drin, da kann ich schlecht den code verändern :-D
oder meinst du, ich soll den code bei dem vorletzten anhang ändern?
das würde ja nichts nützen, die 3 zahlen werden dann einfach in einer anderen reihenfolre angezeigt oder?
mich würde dann aber den source vom letzten anhang trotzdem noch interessieren...

gruss
urbanbruhin

Garfield 16. Nov 2005 19:30

Re: Falsche Reihenfolge der Laufwerke!
 
Liste der Anhänge anzeigen (Anzahl: 3)
Ja sicher kann ich das.

CDTest_2_Source ist die Source zu der EXE oben. Funktioniert nur unter WinXP und vermutlich Win2000 wie gewünscht.

Bei CDTest_3 ist alles auf die Units von ASPI und SPTI reduziert. Funktioniert unter WinXP mit und ohne ASPI und unter Win98SE.

100nF 17. Nov 2005 17:41

Re: Falsche Reihenfolge der Laufwerke!
 
erstmal dankeschön :angel:

dann zum resultat:
beim ersten pc (1 optisches + 1 virtuelles laufwerk) funktionierte das programm cdtest_2 einwandfrei, beim cdtest_3 war das resultat so:
Zitat:

D: (0:0:0)
F: (0:0:0)
beim zweiten pc (2 optische + 1 virtuelles laufwerk) passten bei cdtest_2 die laufwerksbeschreibungen nicht zu den laufwerksbuchstaben, aber dafür liefs mit dem cdtest_3 problemlos

beim dritten pc (2 optische laufwerke) war das resultat bei cdtest_3 das gleiche wie beim ersten pc. beim cdtest_2 war das resultat folgendes:
Zitat:

Fehler beim Initialisieren von CDRip
ich vermute aber eher, dass das ein problem vom pc ist, und nicht vom programm...
könnte sein dass das mit dem CDRip bei einem eingeschränkten konto nicht funktioniert oder so.

jetzt müsste ich aber noch irgendwie rausbekommen, WELCHE variante für WELCHEN pc die richtige ist :gruebel: :gruebel:

ach ja, alle drei pc haben win xp prof., sp2

Garfield 17. Nov 2005 21:06

Re: Falsche Reihenfolge der Laufwerke!
 
Zitat:

Zitat von urbanbruhin
jetzt müsste ich aber noch irgendwie rausbekommen, WELCHE variante für WELCHEN pc die richtige ist :gruebel: :gruebel:

ach ja, alle drei pc haben win xp prof., sp2

:gruebel: Bei WinXP-Rechnern: Prüfung nur mittels SPTI.

Die Laufwerke selbst sind nicht für die unterschiedlichen Anzeigen verantwortlich. Die Ursache ist wohl diese:

Zitat:

Zitat von urbanbruhin
bei den einen PCs befindet sich die datei WNASPI32.DLL schon im system32-verzeichnis, aber nicht bei allen. ausserdem gibt es verschiedene versionen von dieser DLL, die dann auch nicht das selbe ergebnis in deinem beispielprogramm erzielen. habe ich auch getestet.

Das Programm prüft mit SPTI und ASPI. Genau habe ich es mir aber nicht angesehen.

Wenn man es also richtig machen will, muss man wie zum Beispiel bei VCDEasy eine Trennung zwischen SPTI und ASPI sowie nach den verschiedenen ASPI-Versionen vornehmen und entsprechende Routinen schreiben.

Wenn Du VCDEasy installiert hast, kannst Du die verwendeten Treiber ablesen. Da steht dann SPTI, ASPI: Adaptec bzw ASPI: Nero. Früher durfte man nur Adaptec Version 4.60 verwenden. Jetzt wird die 4.71 empfohlen.

Was Du mal probieren kannst: Lasse die wnaspi32.dll auf den Rechnern suchen, benenne sie um (zum Beispiel _ anhängen) und starte dann CDTest_3.exe. Dann sollte die Anzeige bei allen Rechnern stimmen. Bei CDTest_2.exe gibt es den CDRip-Fehler, weil da die wnaspi32.dll benötigt wird.

Garfield 17. Nov 2005 23:10

Re: Falsche Reihenfolge der Laufwerke!
 
Liste der Anhänge anzeigen (Anzahl: 2)
So, dann wollen wir mal weitertesten.

In TForm1.Create steht als erste Zeile

Delphi-Quellcode:
CDInterface := cdiAutoDetect;
Das ich diesen Wert verwendet habe war ein Zufall. Aber sehen wir die anderen beiden Werte an:

Delphi-Quellcode:
CDInterface := cdiNTSCSI;
CDInterface := cdiASPI;
Am besten Du testet die Wirkung der Werte.

Garfield 21. Nov 2005 18:41

Re: Falsche Reihenfolge der Laufwerke!
 
Klappt es nun?

100nF 23. Nov 2005 16:51

Re: Falsche Reihenfolge der Laufwerke!
 
sry dass es so lange gedauert hat, habe grad ziemlich viel stress... :(

zum cdTest_4:
beim ersten PC hats mit "SPTI" und mit "Auto" funktioniniert.
beim zweiten PC hats mit "SPTI" funktioniert, und bei "Auto" war die reihenvolge der laufwerksbezeichnungen vertauscht.
beim dritten war das ergebnis gleich wie beim ersten PC.

das "ASPI" hat bei keinem funktioniert.
noch etwas das mich störte: wenn man das programm startet und zu früh (bis ca. 3sek nach Programmstart) auf "SPTI" klickt, kamen da komische sachen wie
Zitat:

D: (48:136:209) ÿÿÿÿ*ˆÑw?ÆÑw
F: (60:55:140)
:gruebel:
wenn man etwas später nochmal auf "SPTI" klickt, stimmt es:
Zitat:

D: (2:0:0) PHILIPS CDRW/DVD CDD5263
F: (3:0:0) Generic DVD-ROM
meinst du, das kamm man ändern?

und wie kann man feststellen, ob ich bei einem pc "SPTI", "ASPI" oder "Auto" anwenden muss?
ach ja, stimmen denn jetzt die einträge auch mit der reihenfolge von TCDRip zusammen?

gruss
urbanbruhin

Garfield 23. Nov 2005 18:32

Re: Falsche Reihenfolge der Laufwerke!
 
Zitat:

Zitat von urbanbruhin
sry dass es so lange gedauert hat, habe grad ziemlich viel stress... :(

Ach so, ich wollte nicht drängeln.

Zitat:

Zitat von urbanbruhin
das "ASPI" hat bei keinem funktioniert.

Das hat bei mir auch nur unter Win98SE funtkioniert. Muss an der AspiCD.pas liegen, denn TCDRip benötigt ASPI-Treiber und findet sie auch.

Zitat:

Zitat von urbanbruhin
... meinst du, das kamm man ändern?

Ich wüsste nicht wie. In meinem Programm werden die Laufwerke im Form.Create abgefragt und es sind keine Probleme aufgetreten.

Zitat:

Zitat von urbanbruhin
und wie kann man feststellen, ob ich bei einem pc "SPTI", "ASPI" oder "Auto" anwenden muss?

Das ist Betriebssystemabhängig. WinNT/2000/XP verwenden SPTI. Win9x/ME verwendet ASPI. In der SptiCD.pas ist die Funktion GetOSVersion, welche zwischen Win95, Win98, WinNT35, WinNT4, Win2000 und WinXP unterscheidet. Du könntest demzufolge das Betriebssystem abfragen:

Delphi-Quellcode:
uses
  ..., SptiCD;

...

if GetOSVersion > 1
then CDInterface := cdiNTSCSI
else CDInterface := cdiASPI;
...
oder mit CASE:

Delphi-Quellcode:
case GetOSVersion of
0..1 : cdiASPI;
2..5 : cdiNTSCSI;
else  cdiAutoDetect;
end;
Statt der Zahlen kann man natürlich auch die Konstantennamen verwenden.

Zitat:

Zitat von urbanbruhin
ach ja, stimmen denn jetzt die einträge auch mit der reihenfolge von TCDRip zusammen?

Bei mir ja. Sollte bei Dir auch stimmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 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