AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Falsche Reihenfolge der Laufwerke!
Thema durchsuchen
Ansicht
Themen-Optionen

Falsche Reihenfolge der Laufwerke!

Ein Thema von 100nF · begonnen am 30. Okt 2005 · letzter Beitrag vom 23. Nov 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#11

Re: Falsche Reihenfolge der Laufwerke!

  Alt 10. Nov 2005, 20:25
Hallo, bin gerade wieder zu Hause eingetrudelt.

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 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
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#12

Re: Falsche Reihenfolge der Laufwerke!

  Alt 12. Nov 2005, 08:58
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
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#13

Re: Falsche Reihenfolge der Laufwerke!

  Alt 12. Nov 2005, 23:58
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.
Angehängte Dateien
Dateityp: zip cdtest_source_306.zip (237,9 KB, 15x aufgerufen)
Dateityp: 7z cdtest_binary_342.7z (201,5 KB, 11x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#14

Re: Falsche Reihenfolge der Laufwerke!

  Alt 13. Nov 2005, 12:09
hallo Garfield,

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

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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Falsche Reihenfolge der Laufwerke!

  Alt 13. Nov 2005, 12:28
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)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#16

Re: Falsche Reihenfolge der Laufwerke!

  Alt 13. Nov 2005, 15:04
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
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#17

Re: Falsche Reihenfolge der Laufwerke!

  Alt 13. Nov 2005, 16:03
Zitat von urbanbruhin:
vielen dank dass du dir so viel zeit dafür genommen hast!!
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 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 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 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.

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.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#18

Re: Falsche Reihenfolge der Laufwerke!

  Alt 13. Nov 2005, 17:10
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

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.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#19

Re: Falsche Reihenfolge der Laufwerke!

  Alt 13. Nov 2005, 20:22
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.
Angehängte Dateien
Dateityp: 7z cdtest_164.7z (298,0 KB, 9x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#20

Re: Falsche Reihenfolge der Laufwerke!

  Alt 14. Nov 2005, 09:30
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.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 09:18 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