![]() |
Re: Falsche Reihenfolge der Laufwerke!
Hallo, bin gerade wieder zu Hause eingetrudelt.
Zitat:
Zitat:
Delphi-Quellcode:
Ein paar Beispiele fundest Du auch in
uses
cdrip_dll; var Parameter : TCDROMParams; b : Byte; begin b := Parameter.btAdapterID; end; ![]() |
Re: Falsche Reihenfolge der Laufwerke!
hi,
also ich habe mal folgendes gemacht:
Delphi-Quellcode:
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.
var
Parameter : TCDROMParams; b : Byte; begin cdrip_dll.CR_GetCDROMParameters(parameter); b := Parameter.btAdapterID; end; ist es möglich dass ich anhand vom wert der variable b den laufwerksbuchstaben ermitteln kann? gruss urbanbruhin |
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:
Für CDDB:
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;
Delphi-Quellcode:
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.
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; Gesetzt werden sie mit:
Delphi-Quellcode:
Und ausgelesen mit:
CR_SetActiveCDROM(cmb_Drives.ItemIndex); // CD Rip
CDDB.ChangeActiveDrive(cmb_Drives.ItemIndex); // CDDB
Delphi-Quellcode:
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.
cmb_Drives.ItemIndex := CR_GetActiveCDROM; // CD Rip
cmb_Drives.ItemIndex := CDDB.CdRoms.ActiveCdRom; // CDDB Wenn jetzt die Reihenfolge bei Dir nicht übereinstimmt, hast Du Fehler in Deinem Sourcen. |
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 |
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) |
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 |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
Zitat:
Die verschiedenen Versionen resultieren aus den verschiedenen Anbietern. So zum Beispiel von Adaptec und Nero. Zitat:
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:
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. |
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. |
Re: Falsche Reihenfolge der Laufwerke!
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe kein Nero und mir deshalb die aktuelle wnaspi32.dll von
![]() 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. |
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 ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:25 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