Нативные коллекции нормально работают только VisualBasic, поскольку для них предусмотрен стандартный цикл For Each. Для возможности получения элементов коллекции добавлена функция CreateCollectionEnumerator, создающая объект перечислителя.
function GetDirFiles(Dir: string; NameOnly: Boolean = False): TStrings;
var
FileSystemObject, Folder, File: Variant;
Enum: IcmVariantCollectionEnumerator;
begin
Result := TStringList.Create;
if not DirectoryExists(Dir) then
Exit;
FileSystemObject := CreateOleObject('Scripting.FileSystemObject');
Folder := FileSystemObject.GetFolder(Dir);
Enum := CreateCollectionEnumerator(Folder.Files);
while Enum.MoveNext do
begin
File := Enum.Current;
if NameOnly then
Result.Add(File.Name)
else
Result.Add(File.Path);
end;
end;
var
Files: TStrings;
begin
Files := GetDirFiles('c:\temp');
try
ShowMessage(Files.Text);
finally
Files.Free;
end;
end.