Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Klassen verknüpfen?
Delete - Fr 11.07.08 21:56
Titel: Klassen verknüpfen?
Moin! :D
ich habe ein Problem.Und zwar mit zwei klassen. Beispiel:
ich erstelle zwei klassen und in der einen procedure der zweiten klasse rufe ich die andere auf.
aber jetzt gibs ne zugriffsverletzung.
Was muss ich machen? :roll:
Christian S. - Fr 11.07.08 21:58
Nicht so viel Informationen, das kann doch keiner durchlesen! Diese riesen Mengen an Quellcode schon gar nicht! :shock:
...
Meine Glaskugel sagt mir, dass Du vorher noch irgendwo eine Instanz einer Klasse erzeugen musst.
Jerk - Fr 11.07.08 22:22
Vorher initialisieren?
Delete - Fr 11.07.08 23:15
Zitat: |
Meine Glaskugel sagt mir, dass Du vorher noch irgendwo eine Instanz einer Klasse erzeugen musst. |
Dann frage bitte deine göaskugel wie das geht. :wink:
Christian S. - Fr 11.07.08 23:21
Wie wäre es, wenn Du erst einmal mehr Informationen lieferst, damit man weiß, ob das überhaupt der Fehler ist? Ich mach mir doch jetzt nicht die Mühe, um hinterher veilleicht festzustellen, dass das gar nicht der Fehler ist.
Dass Du nach meinem überdeutlichen Hinweis keine Informationen nachlieferst, ist schon ziemlich unverschämt! :evil:
Delete - Sa 12.07.08 10:20
Delphi-Quelltext
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:
| type TAudioFile = class private fInterpret: String; fTitel : String; fPfad : String; fDauer : Integer;
procedure GetMp3Info; procedure GetWmaInfo; procedure SetUnknown;
function GetPlaylistTitel: String;
public property Interpret: String read fInterpret write fInterpret; property Titel : String read fTitel write fTitel; property Pfad : String read fPfad; property Dauer : Integer read fDauer write fDauer; property PlaylistTitel: String read GetPlaylistTitel;
constructor Create; destructor Destroy; override;
procedure GetAudioInfo(filename: String); procedure Assign(aAudioFile: TAudioFile); end; TMeMPPlayer = class private fMainStream: DWord; fMainVolume: single; fMainAudioFile: TAudioFile; function MeMP_CreateStream(aFilename: String): DWord; procedure SetVolume(Value: single); function GetTime: Double; function GetProgress: Double; procedure SetProgress(Value: Double); function GetBassStatus: DWord; public property Volume: single read fMainVolume write SetVolume; property Time: Double read GetTime; property Progress: Double read GetProgress write SetProgress; property BassStatus: DWord read GetBassStatus; constructor Create; procedure SetPosition(Value: Longword); destructor Destroy; override; procedure InitBassEngine(HND: HWND); procedure Play(aAudioFile: TAudioFile); procedure Pause; procedure Stop; procedure Resume; procedure StopAndFree; end; implementation
procedure TMeMPPlayer.Play(aAudioFile: TAudioFile); begin if aAudioFile <> NIL then begin fMainAudioFile.Assign(aAudioFile); StopAndFree; fMainstream := MeMP_CreateStream(fMainAudioFile.Pfad); BASS_ChannelSetAttribute(fMainStream, BASS_ATTRIB_VOL, fMainVolume); BASS_ChannelPlay(fMainStream , True); end; end; procedure TForm1.FormCreate(Sender: TObject); begin
globalaudiofile:= TAUDIOfile.create; MEMPPLAYER:=TMEMPpLAYER.create; MeMPPlayer.InitBassEngine(Handle); MeMPPlayer.Volume := 1; end; |
Also hier ist der gewünschte quelltext.
Delete - Sa 12.07.08 10:24
Ach und entschuldigung. :cry: :cry: :cry:
Der fehler kenne ich ja schon wie gesagt sobald ich in der einen procedure der klasse memp
die klasse taudiofile aufrufe kommt eine zugriffsverletzung. :cry: :cry: :cry:
Ach der quelltext kommt euch bestimmt bekannt vor.ist aus gausis tut. :wink:
Gausi - Sa 12.07.08 11:18
Ich habe jetzt noch nicht verstanden, wo da jetzt die Zugriffsverletzung kommt. :gruebel:
Delete - Sa 12.07.08 11:19
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| case MeMPPlayer.BassStatus of BASS_ACTIVE_STOPPED: begin MeMPPlayer.Play(GlobalAudioFile);end; BASS_ACTIVE_PLAYING: MeMPPlayer.Pause; BASS_ACTIVE_PAUSED : MeMPPlayer.Resume; end; end; |
mkinzler - Sa 12.07.08 11:29
Existiert den eine Instanz von TAudioFile?
Delete - Sa 12.07.08 11:32
Was ist eine instanz?
Delete - Sa 12.07.08 11:39
Ach :autsch: :autsch: :autsch: !Ich habs mit den begriffen nicht so. :oops:
Habs kapiert.ja ich habe eine Instanz angelegt. 8)
Gausi - Sa 12.07.08 12:05
Häng mal das ganze Projekt an. Da ist bestimmt irgendwo eine globale Variable lokal (dieses GlobalAudioFile ist im Tutorial nur temporär, das kommt später weg - nur so zur Verteidigung :angel:), oder wird irgendwo freigegeben, sodass der Zeiger zwar <> Nil, aber nicht mehr gültig ist... :nixweiss:
Delete - Sa 12.07.08 12:33
OK hier ist er.
Moderiert von
Christian S.: 500 Zeilen sind wohl als Anhang besser ...
Gausi - Sa 12.07.08 12:42
Bitte sag nicht, dass dein Code wirklich so ausieht. Das ist ja grausam - ich hoffe mal, dass das durch das Copy&Paste hier gekommen ist. :eyes:
Das einzige, was mir so auffällt, ist das ganze NewInstance-Gedöns. Lass das mal weg, und erzeuge die Objekte so, wie im Tutorial gezeigt.
Delete - Sa 12.07.08 12:48
das war ein versuch nachdem ich an diesem fehler verzweifelt bin.-
was jetzt?
Gausi - Sa 12.07.08 12:51
Ich weiß auch nicht, was du da so machst. Ich habe in meinem ganzen Leben noch nie NewInstance benötigt - kannte das bisher nicht einmal. Und so, wie der Code formatiert ist, und mit den Bezeichnern, guck ich da nicht weiter durch. Das ganze Projekt (also pas, dpr, dfm, etc) könnte ich mal durchgucken, wo der Compiler/Debugger meckert.
Ein paar OOP-Grundlagen wären aber sicherlich nicht verkehrt. ;-)
Delete - Sa 12.07.08 12:59
Delphi-Quelltext
1:
| If funzt=true then Juhuuuu! ; |
Juhuuuuuuuuuu! :D :D :D :D :D :lol:
es funktioniert!Ich muss mir unbedingt angewöhnen meinen code sauber zu schreiben.
ich hab vergessen eine Instanz zu erzeugen:
mempplayer.fMainAudioFile:= TAudioFile.Create; :idea:
bin selber drauf gekommen.da sieht man mal das man lieber seinen code mal ordentlich durchgucken sollte. 8)
Dunkel - Sa 12.07.08 13:04
j.klugmann hat folgendes geschrieben: |
bin selber drauf gekommen. |
Ach ja?
Christian S. hat folgendes geschrieben: |
Meine Glaskugel sagt mir, dass Du vorher noch irgendwo eine Instanz einer Klasse erzeugen musst. |
mkinzler hat folgendes geschrieben: |
Existiert den eine Instanz von TAudioFile? |
Gausi hat folgendes geschrieben: |
Das einzige, was mir so auffällt, ist das ganze NewInstance-Gedöns. Lass das mal weg, und erzeuge die Objekte so, wie im Tutorial gezeigt. |
Nachdem Du 3 Mal dezent darauf hingewiesen worden bist, bist Du "alleine" drauf gekommen?! Glückwunsch! :lol: :wink:
Naja, Hauptsache es funktioniert. :D :wink:
Delete - Sa 12.07.08 13:34
ich meine damit das ich selbst den fehler gefunden und behoben habe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!