вот решил выложить код с исправленным вариантом...
Код:
...
function FDSearch(inDir:String; iStart:Integer):boolean;
var
F: TSearchRec;
Path: string;
begin
repeat
if iStart>-1 then inDir:=SL1.Strings[iStart];
Path := inDir + '\*.*';
FindFirst(Path, faAnyFile, F);
if F.name <> '' then
begin
if DirOrNot(F.name) = true then SL1.Add(inDir+'\'+F.name)
else if (F.Name<>'.') and (F.Name<>'..') then
begin SL2.Add(F.name);
SL3.Add(inDir+'\'+F.name);
end;
while FindNext(F) = 0 do
begin
if DirOrNot(F.name) = true then SL1.Add(inDir+'\'+F.name)
else if (F.Name<>'.') and (F.Name<>'..') then
begin SL2.Add(F.name);
SL3.Add(inDir+'\'+F.name);
end;
end;
end;
FindClose(F);
iStart:=iStart+1;
until iStart > SL1.Count-1;
end;
function Search(dDir,dName:String):ShortString export; stdcall;
var i:integer;
begin
SLCrtDes(true);
FDSearch(dDir,-1);
for i:=0 to SL2.Count-1 do
begin
if RuLowerCase(dName)=RuLowerCase(SL2.Strings[i]) then
begin
Search:=SL3.Strings[i];
end;
end;
SLCrtDes(false);
end;
exports Search name 'Search';
...
P.S. нужно иногда и "покурить" сходить, а то что-то тупить начинаешь по страшному... вплоть до переполнения стека...