Hey!
Also ist das in Ordnung... ? Aber warum in aller Welt muss ich die Länge des Arrays nicht angeben?
Wäre es generisch, z.B. List oder vector aus C++ wäre ja mit .Add(meinVar) alles fein. Kann mir das jemand erklären?
Hier nochmal ein wenig Code:
Delphi-Quellcode:
function GetAllDisks(sHostName: String; sUserName: String;
sPassword: String): TDiskInfoList;
const
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator: OLEVariant;
FWMIService: OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject: OLEVariant;
oEnum: IEnumvariant;
iValue: LongWord;
disk: TDiskInfo;
diskList: TDiskInfoList;
begin
try
CoInitialize(nil);
try
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(sHostName, 'root\CIMV2',
sUserName, sPassword);
FWbemObjectSet := FWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive',
'WQL', wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
//if not VarIsNull(FWbemObject.Availability) then
disk.Availability := FWbemObject.Availability;
if not VarIsNull(FWbemObject.BytesPerSector) then
disk.BytesPerSector := FWbemObject.BytesPerSector;
if not VarIsNull(FWbemObject.Capabilities) then
disk.Capabilities := FWbemObject.Capabilities;
Letztendlich gibt die Funktion eine List zurück.
Ich danke euch vielmals.