Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
Delphi 5 Professional
|
Re: Fehler, wenn Procedure aus DLL ausgeführt wird, sonst ni
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)='.pls' then
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)='.m3u' then
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!"
|
|
Zitat
|