Einzelnen Beitrag anzeigen

Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#8

Re: Fehler, wenn Procedure aus DLL ausgeführt wird, sonst ni

  Alt 30. Jan 2005, 13:51
Was steht denn in der ListBox drin? Die Dateinamen? Übergib deiner Funktion lieber einen String in Form eines PChar und splitte den wieder auf. Damit wenig Fehler auftreten können, würde ich auf die Übergabe von Klassen grundsätzlich verzichten.

Ungetestet:
Delphi-Quellcode:
procedure SavePLS(FileName, S1, S2: PChar); stdcall;
// Procedure SavePLS(Filename: String; Listbox:TListbox; Pathlist:TStringList);
Const NumItems = 'NumberOfEntries';
      Section = 'Playlist';
var sav:TiniFile; i,Total:Integer; F:TextFile; Buffer:String;
  PathList: TStringList;
  ListBox: TStringList;
begin

  PathList := TStringList.Create;
  ListBox := TStringList.Create;
  try

    PathList.CommaText := S1;
    ListBox.CommaText := S2;

    if not DirectoryExists(ExtractFilePath(FileName)) then exit;

    if ExtractFileExt(FileName)='.plsthen
    begin
      sav:=TiniFile.Create(Filename);
      try
        Total:=Pathlist.Count;
        if Total>0 then
        begin
          sav.WriteInteger(Section,NumItems,Total);
          sav.WriteInteger(Section,'Version',2);
          for i:=0 to Total-1 do
          begin
            sav.WriteString(Section,'File'+IntToStr(i+1),Pathlist.Strings[i]);
            // sav.WriteString(Section,'Title'+IntToStr(i+1),Listbox.Items.Strings[i]);
            sav.WriteString(Section,'Title'+IntToStr(i+1),Listbox.Strings[i]);
          end;
        end;
      finally
        sav.Free;
      end;
    end;

    if ExtractFileExt(FileName)='.m3uthen
    begin
      try
        AssignFile(F,Filename);
        Rewrite(F);
        Writeln(F,'#EXTM3U');
        for i:=0 to PathList.Count-1 do
        begin
          Buffer:=Format('#EXTINF:%d,%s',[-1 {Time},PathList.Strings[i]]);
          WriteLn(F,Buffer);
          // WriteLn(F,Listbox.Items.Strings[i]);
          WriteLn(F,Listbox.Strings[i]);
        end;
      finally
        CloseFile(F);
      end;
    end;

  finally
    ListBox.Free;
    PathList.Free;
  end;

end;
Aufrufen kannst du es dann so:
SavePLS(PChar(FileName), PChar(ListBox1.Items.CommaText), PChar(PathList.CommaText));
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat