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