Показать сообщение отдельно
  #1  
Старый 01.03.2011, 13:09
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
Вопрос Поиск файлов и dll

Здравствуйте!
Появилась проблемка написал алгоритм поиска файлов и папок, разрабатывал его на форме - все работало нормально... стал переносить в dll выдовало ошибку "Exports allowed only at global scope", но с этой проблемой вроде как разобрался. Далее в чем беда - код компилируется нормально, но вернуть значение не удается... Может кто глянет и поймет где я накосячил...
Код:
library Project2;
uses
  SysUtils,
  Classes;
procedure Research(LBitem:Integer; sName:String); forward;
var
    SL1,SL2,SL3:TStringList;
{$R *.res}

function RuLowerCase(const S: string): string;
var
  Ch: Char;
  L: Integer;
  Source, Dest: PChar;
begin
  L := Length(S);
  SetLength(Result, L);
  Source := Pointer(S);
  Dest := Pointer(Result);
  while L <> 0 do
  begin
    Ch := Source^;
    if ((Ch >= 'A') and (Ch <= 'Z')) or ((Ch >= 'А') and (Ch <= 'Я')) then Inc(Ch, 32);
    Dest^ := Ch;
    Inc(Source);
    Inc(Dest);
    Dec(L);
  end;
end;

function SLCrtDes(CnD:boolean):boolean;
begin
if CnD = true then
  begin
    SL1:=TStringList.Create;
    SL2:=TStringList.Create;
    SL3:=TStringList.Create;
    Sl1.Clear;
    Sl2.Clear;
    Sl3.Clear;
  end else begin
    SL1.Destroy;
    SL2.Destroy;
    SL3.Destroy;
  end;
end;

function DirOrNot(iItem: String):boolean;
var i,j: integer;
begin
DirOrNot:=true;
  for i:=1 to Length(iItem) do
    begin
      if iItem[i] = '.' then DirOrNot:=false;
    end;
end;

function FDSearch(inDir,Fname:String; Attribut,iStart:Integer):ShortString export; stdcall;
var
  F: TSearchRec;
  Path, sDir: string;
  Attr,i: Integer;
begin
SLCrtDes(true); //Создание StringList (SL1,2,3)
  Path := inDir + '\*.*';
  FindFirst(Path, Attribut, F);
  if F.name <> '' then
  begin
    if DirOrNot(F.name) = true then SL1.Add(inDir+'\'+F.name)  //DirOrNot провека папка или файл
        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);
  //до этого места работает
  if iStart <= SL1.Count-1 then Research(iStart,Fname)
    else begin
        for i:=0 to SL2.Count-1 do
          begin
            if RuLowerCase(Fname)=RuLowerCase(SL2.Strings[i]) then
              begin
                FDSearch:=SL3.Strings[i];
              end;
          end;
    end;
end;

procedure Research(LBitem:Integer; sName:String);
var NextDir:String;
begin
NextDir:=SL1.Strings[LBitem];
 FDSearch(NextDir,sName,faReadOnly + faArchive + faDirectory,LBitem+1);
end;

exports FDSearch name 'FDSearch';

begin
end.

Заранее Спасибо!
Ответить с цитированием