| 
| Autor | Beitrag |  
| JayEff 
          Beiträge: 2971
 
 Windows Vista Ultimate
 D7 Enterprise
 
 | 
Verfasst: Do 28.04.05 22:33 
 
Hi Leute.
 Ich bekomme beim Ausführen einer FindFirst/FindNext prozedur in meiner Dll immer einen fehler! Das Compilieren beider teile klappt, nur beim ausführen des Codes kommt erstmal die gängige EConvertError (kein TStringList nach TStringList) nachricht. Warum kann ich keine TStringList zu einer TStringList zuweisen?
 Die DLL: 												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 
 | Library WinampAPI;{$WARN UNIT_PLATFORM OFF}
 Uses
 FastShareMem,
 SysUtils,
 Classes,
 Windows,
 ShellAPI,
 FileCtrl,
 WinAmpCtr;
 
 Var
 Dirs: TStringList;
 WM: TWinampCtr;
 {$R *.res}
 
 
 Function FindPLs(Directory: String): TStringList Stdcall;
 Var
 SR: TSearchRec;
 Begin
 result := TStringList.Create;
 FindFirst(Directory + '\*.m3u', faAnyFile, SR);
 Dirs.Add(Directory);
 result.Add(SR.Name);
 While FindNext(SR) = 0 Do
 Begin
 result.Add(SR.Name);
 Dirs.Add(Directory);
 End;
 End;
 
 Function ReplaceM3U(List: String): String Stdcall;
 Begin
 result := StringReplace(List, '.m3u', '', [rfReplaceAll]);
 End;
 
 Exports ReplaceM3U,
 FindPLs,
 Execute,
 getFilename,
 Winampctrl_init,
 Winampctrl_free,
 PlayState,
 StartWinamp,
 NextTrack,
 PrevTrack,
 started,
 PlayingRandom,
 shuffle,
 Trackdata,
 State;
 
 End.
 |  Mit folgendem Code rufe ich die Prozedur aus der dll auf:
 												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 55:
 56:
 57:
 58:
 59:
 60:
 61:
 62:
 63:
 64:
 65:
 66:
 67:
 68:
 69:
 70:
 71:
 72:
 73:
 74:
 75:
 76:
 77:
 78:
 79:
 80:
 81:
 82:
 83:
 84:
 85:
 86:
 87:
 88:
 89:
 90:
 91:
 92:
 
 | Unit Unit1;
 Interface
 {$WARN UNIT_PLATFORM OFF}
 Uses
 FastShareMem,
 Windows,
 Messages,
 SysUtils,
 Variants,
 Classes,
 Graphics,
 Controls,
 Forms,
 Dialogs,
 StdCtrls,
 FileCtrl,
 WinAmpCtr,
 ComCtrls,
 ShellAPI,
 ExtCtrls;
 
 Function ReplaceM3U(List: String): String Stdcall; external 'WinampAPI.dll';
 Function FindPLs(Directory: String): TStringList Stdcall; external 'WinampAPI.dll';
 Procedure Execute(FileName: String) Stdcall; external 'WinampAPI.dll';
 Function getFilename(Directorys, Names: TStringList; Index: Integer): String Stdcall; external 'WinampAPI.dll';
 Procedure PlayState(State: String) Stdcall; external 'WinampAPI.dll';
 Procedure StartWinamp(Yes: Boolean) Stdcall; external 'WinampAPI.dll';
 Procedure PrevTrack; Stdcall; external 'WinampAPI.dll';
 Procedure NextTrack; Stdcall; external 'WinampAPI.dll';
 Procedure Winampctrl_free; Stdcall; external 'WinampAPI.dll';
 Procedure Winampctrl_init; Stdcall; external 'WinampAPI.dll';
 Function started: Boolean Stdcall; external 'WinampAPI.dll';
 Function PlayingRandom: Boolean Stdcall; external 'WinampAPI.dll';
 Procedure shuffle(Activate: Boolean) Stdcall; external 'WinampAPI.dll';
 Function Trackdata: TStringList Stdcall; external 'WinampAPI.dll';
 Function State: String Stdcall; external 'WinampAPI.dll';
 
 Var
 Form1: TForm1;
 Dirs: TStringList;
 Implementation
 
 {$R *.dfm}
 
 
 
 Procedure TForm1.Button2Click(Sender: TObject);
 Var
 Directory: String;
 S: TStringList;
 i: Integer;
 Begin
 S := TStringList.Create;
 If SelectDirectory('Playlists laden', '', Directory) Then
 Begin
 S.Assign(FindPLs(Directory));         For i := 1 To S.Count Do             Dirs.Add(Directory);
 ListBox1.Items.Commatext := ReplaceM3U(S.Commatext);
 End;
 S.Free;
 End;
 
 Procedure TForm1.FormCreate(Sender: TObject);
 Begin
 Winampctrl_init;
 Dirs := TStringList.Create;
 Timer1.Enabled := started;
 End;
 
 Procedure TForm1.FormClose(Sender: TObject; Var Action: TCloseAction);
 Begin
 Winampctrl_free;
 Dirs.Free;
 End;
 End.
 |  Danke schonmal Leute  _________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
 [>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
 
 Zuletzt bearbeitet von JayEff am Do 28.04.05 23:24, insgesamt 1-mal bearbeitet
 |  |  |  
| JayEff  
          Beiträge: 2971
 
 Windows Vista Ultimate
 D7 Enterprise
 
 | 
Verfasst: Do 28.04.05 23:17 
 
OOOK. Es lag daran, dass die erste Unit in der PROJEKTDATEI kein Fastsharemem war sondern "Forms"! Nun kann ich ja wieder zur wichtigstens meiner Fragen zurückkehren. *ersten post änderts* _________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
 [>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
 |  |  |  
| JayEff  
          Beiträge: 2971
 
 Windows Vista Ultimate
 D7 Enterprise
 
 | 
Verfasst: Fr 29.04.05 16:32 
 
Sacht mal Leute? Sind meine Fragen so kompliziert? Formuliere ich sie falsch? Bin ich dumm, und ihr wollt mich selbst draufkommen lassen? Könnt ihr mich nicht leiden??
 Ich frag nur desshalb so, weil auf meine letzten paar Fragen einfach keine Lösungen kamen. manchmal wurde es versucht, aber nie kam ne Lösung raus.  und jetzt bekomm ich nichtmal EINE antwort. Irgentwas mach ich falsch, da bin ich mir sicher. aber was? könnt ihr mir nich wenigstens das sagen?
 
 (Sorry falls das als Schiebeposting gilt, wenn ihr wollt poste ich die gleiche Frage mal inner Offtopic...)
 _________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
 [>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
 |  |  |  
| Sprint 
          Beiträge: 849
 
 
 
 
 | 
Verfasst: Fr 29.04.05 18:15 
 
		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 
 | program Project1;
 uses
 FastShareMem in 'FastShareMem.pas',
 Forms,
 Unit1 in 'Unit1.pas' ;
 
 {$R *.res}
 
 begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
 end.
 |  												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 55:
 56:
 57:
 58:
 59:
 60:
 61:
 62:
 63:
 64:
 65:
 66:
 67:
 68:
 69:
 70:
 71:
 72:
 73:
 74:
 75:
 76:
 
 | unit Unit1;
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
 
 type
 TForm1 = class(TForm)
 
 private
 
 Dirs: TStringList;
 public
 
 end;
 
 var
 Form1: TForm1;
 
 function FindPLs(const Directory: String): TStringList;
 function ReplaceM3U(const List: String): String;
 
 implementation
 
 {$R *.dfm}
 
 uses
 FileCtrl;
 
 const
 WinampAPI = 'WinampAPI.dll';
 
 function FindPLs; external WinampAPI name 'FindPLs';
 function ReplaceM3U; external WinampAPI name 'ReplaceM3U';
 
 
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 
 Dirs := TStringList.Create;
 
 end;
 
 
 
 procedure TForm1.FormDestroy(Sender: TObject);
 begin
 
 Dirs.Free;
 
 end;
 
 
 
 procedure TForm1.Button2Click(Sender: TObject);
 var
 Directory: String;
 PlayLists: TStringList;
 begin
 
 if SelectDirectory('', '', Directory) then
 begin
 PlayLists := FindPLs(Directory);
 Dirs.AddStrings(PlayLists);
 ListBox1.Items.CommaText := ReplaceM3U(PlayLists.CommaText);
 PlayLists.Free;
 end;
 
 end;
 
 
 
 end.
 |  												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 
 | library WinampAPI;
 uses
 FastShareMem in 'FastShareMem.pas',
 SysUtils,
 Classes;
 
 {$R *.res}
 
 
 
 function FindPLs(const Directory: String): TStringList;
 var
 SR: TSearchRec;
 begin
 
 Result := TStringList.Create;
 if FindFirst(IncludeTrailingPathDelimiter(Directory) + '*.m3u', faAnyFile, SR) = 0 then
 begin
 repeat
 Result.Add(SR.Name);
 until FindNext(SR) <> 0;
 FindClose(SR);
 end;
 
 end;
 
 
 
 function ReplaceM3U(const List: String): String;
 begin
 
 Result := StringReplace(List, '.m3u', '', [rfReplaceAll]);
 
 end;
 
 
 
 exports
 FindPLs,
 ReplaceM3U;
 
 end.
 | _________________ Ciao, Sprint .
 |  |  |  
| JayEff  
          Beiträge: 2971
 
 Windows Vista Ultimate
 D7 Enterprise
 
 | 
Verfasst: Fr 29.04.05 18:44 
 
[Fehler] WinampAPI.dpr(180): Inkompatible Typen: 'Cardinal' und 'TSearchRec'
in der linie FindClose(SR);
 
 Was genau hast du anders gemacht? Ausser das Stdcall weglassen. Lag es denn vielleicht daran?
 [edit] Hatte wohl vergessen irgenteine Unit einzubinden... Jetzt gehts xD
 Aber der EConvertError kommt immernoch. TStringlist kann nicht zu TStringList zugewiesen werden. Könnte wohl jemand den Code ausprobieren?[/edit]
 
 [edit]Ui jetzt gehts O_O Immer wird mir gesagt, ich soll Assign verwenden statt S:=FindPLs(Directory); aber kaum benutz ichs, klappts ganz absolut perfekt O_O[/edit]
 _________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
 [>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
 |  |  |  |