Serielle Schnittstelle enumeration in Delphi mit SetupDiGetClassDevs

Ich versuche auflisten "friendly names" für die COM-ports. Die ports können dynamisch zu ändern, wie USB-serial-Geräte angeschlossen sind und getrennt zur Laufzeit.

Basierend auf den möglichen Methoden, beschrieben in diese Frage, ich bin versucht, SetupDiGetClassDevs Methode.

Fand ich dieser Beispiel-code, aber es ist ja für eine ältere version der setupapi-unit (der original-link zu homepages.borland.com nicht funktioniert natürlich).

Ich habe versucht mit der setupapi-Gerät aus der aktuellen JVCL(JVCL340CompleteJCL221-Build3845), aber es scheint nicht kompatibel zu sein mit Delphi 7. Bekomme ich compiler Fehler:

if SetupDiGetDeviceRegistryProperty(DevInfoHandle,DeviceInfoData,
    RegProperty,
    @PropertyRegDataType,
    @S1[1],RequiredSize,@RequiredSize) then begin

In den Aufruf der Funktion SetupDiGetDeviceRegistryProperty,
Ich bekomme die Fehlermeldung "Typen der tatsächlichen und formalen Parameter müssen identisch sein" auf die Parameter @PropertyRegDataType, und @RequiredSize.

Den Delphi3000 Seite sagt der code wurde geschrieben in den Jahren 2004 und ist bestimmt für Delphi 7, also ich bin mir nicht sicher, warum es nicht funktioniert mit Delphi 7, es sei denn, setupapi geändert hat. Ist jemand mit den änderungen vertraut zu setupapi, könnten diese Probleme verursachen?

Teste ich mit einem einfachen Konsolenprogramm. Die uses-Anweisung ist " windows,
sysutils,
Klassen,
setupAPI,
Registrierung;"

Wird das Hauptprogramm:

  begin
  ComPortStringList := SetupEnumAvailableComPorts;
  for Index := 0 to ComPortStringList.Count - 1 do
      writeln(ComPortStringList[Index]);
  end;
  end.

InformationsquelleAutor tim11g | 2011-02-15

Schreibe einen Kommentar