AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

for ..in auf Interface

Ein Thema von hsg · begonnen am 1. Okt 2013 · letzter Beitrag vom 1. Okt 2013
Antwort Antwort
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#1

for ..in auf Interface

  Alt 1. Okt 2013, 14:37
Hallo zusammen,

ich habe hier einen Sensor, der mittels USB an den Rechner angeschlossen wird. Die API dieses Sensors bietet die Möglichkeit die Seriennummer des Gerätes auszulesen.
Das ganze sieht unter VBA wie folgt aus:
Code:
Sub Test()

Dim usbserials As tcusbserials
Set usbserials = New tcusbserials
usbserials.Init ("testo435-635-735")
Dim serial As Variant
For Each serial In usbserials

  Debug.Print serial

Next

End Sub
Ich versuche gerade dieses Auslesen in Delphi nachzubauen (letztendlich muss es in Delphi5 laufen)
Für die ersten Versuche wollte ich die ForEach-Schleife in der BDS2006 nachbauen, weiß aber schon dort nicht mehr weiter

Delphi-Quellcode:
procedure TForm1.pshInitClick(Sender: TObject);
var
  oUsb : Ttcusbserials;
  n : IUnknown;
  nSer : Integer;
begin

  oUsb := Ttcusbserials.Create(Self);
  oUsb.AutoConnect := True;
  oUsb.Init('testo435-635-735');
  for n in oUsb do begin

  end; // for n := 0 to
end;
Dabei ist TtcusbSerials wie folgt definiert:
Delphi-Quellcode:
Ttcusbserials = class(TOleServer)
  private
    FIntf: Itcusbserials;
    function GetDefaultInterface: Itcusbserials;
  protected
    procedure InitServerData; override;
    function Get_Count: Integer;
    procedure Set_Count(Value: Integer);
    function Get__NewEnum: IUnknown;
    procedure Set__NewEnum(const Value: IUnknown);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Connect; override;
    procedure ConnectTo(svrIntf: Itcusbserials);
    procedure Disconnect; override;
    function Init(const szFilter: WideString): WordBool;
    property DefaultInterface: Itcusbserials read GetDefaultInterface;
    property _NewEnum: IUnknown read Get__NewEnum write Set__NewEnum;
    property Count: Integer read Get_Count write Set_Count;
  end;

Itcusbserials = dispinterface
    ['{0164C373-41F1-4601-92A9-3595EA07A0FD}']
    function Init(const szFilter: WideString): WordBool; dispid 2;
    property Count: Integer dispid 1;
    property _NewEnum: IUnknown dispid -4;
  end;
Der Compiler meldet in der for-in-Zeile den Fehler Inkompatible Typen 'IInterface' und 'TComponent'
Was ich an dieser Stelle zwar verstehe, aber leider nicht weiß, wie ich es besser mache
Mir ist schon klar, dass ich nicht direkt das oUSB-Objekt verwenden kann, also habe ich es mit dem DefaultInterface versucht:
Delphi-Quellcode:
  for n in oUsb.DefaultInterface do begin

  end;
Fehlermeldung des Compilers: for-in-Anweisung arbeitet nicht mit Kollektionstyp 'Itcusbserials', weil 'Itcusbserials' kein Element für 'GetEnumeratur' enthält ...
Wie kann ich nun den (einfachen) VBA-Code aus Excel nach Delphi portieren? Irgendwie stehe ich auf dem Schlauch ... Im Anhang befindet sich die gesamte Typlibrary der API.

Gruß hsg
Angehängte Dateien
Dateityp: zip Tcddka_TLB.zip (10,5 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: for ..in auf Interface

  Alt 1. Okt 2013, 14:46
Vielleicht so?
Delphi-Quellcode:
procedure TForm1.pshInitClick(Sender: TObject);
var
  oUsb: Ttcusbserials;
  oUsbEnum: IEnumVariant;
  n: OLEVariant;
  nSer: Integer;
  iValue: LongWord;
begin
  oUsb := Ttcusbserials.Create(Self);
  oUsb.AutoConnect := True;
  oUsb.Init('testo435-635-735');
  oUsbEnum := IUnknown(oUsb._NewEnum) as IEnumVariant;
  while oUsbEnum.Next(1, n, iValue) = S_OK do
  begin
          
  end;
end;
Mehr dazu:
http://theroadtodelphi.wordpress.com...ariant-arrays/
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: for ..in auf Interface

  Alt 1. Okt 2013, 15:24
Tausend Dank! Funktioniert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:49 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