![]() |
TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
Hallo erstmal, nach durchforschen der suche konte ich nichts dazu finden also...
im groben hab ich eine MDIForm in der mehrere unterschiedliche Childform aufgerufen werden. Diese Childforms Enhalten mehrere eingabeFelder und die TWindowsMediaPlayer (WMP) componente. je nach aufruf (unterschiedliche Parameter) wird die URL des WMP beschrieben. kurzer bsp code:
Delphi-Quellcode:
// Mainform, Aufruf des MDIChild
procedure TMainForm.CreateChildAudio; var Child: TFormDBAudio; begin Child := TFormDBAudio.Create(Application); end;
Delphi-Quellcode:
wenn ich nun sagen wie 3 mal die Form öffne und dan schließe bekomme ich folgende Fehlermeldung:
// Constructor für neues Element, WMP.URL entspricht einem vorher definierten Default wert (c:\temp\demo.wav)
constructor TFormDBAudio.Create(owner :TComponent; EID :integer); begin inherited Create(Owner); // Initialize inherited parts ButtonSave.Enabled:= true; ADOQueryGetAudioTable.Open; ADOQueryGetAudioTable.Insert; ElementEID:= EID; Caption := 'Audio - (mit Element "'+IntToStr(EID)+'" verbunden'; end; // Constructor für ein altes Element, WMP.URL entspricht einem (aus der datenbank) gewonnen constructor TFormDBAudio.Create(owner :TComponent; AID, EID :integer); var temp :string; begin inherited Create(Owner); // Initialize inherited parts ButtonSave.Enabled:= false; ADOQueryGetAudioTable.Parameters.ParamByName('parAID').Value:= AID; ADOQueryGetAudioTable.open; // Öffnet die Tableconnection Caption := 'Audio - '+ DBATitel.Text +' - (mit Element ['+IntToStr(EID)+'] verbunden'; // Bennent das Fenster temp:= ADOQueryGetAudioTable.FieldByName('AID').Value; WMediaPlayerAudio.URL:= URLPath + temp + '.mus'; end; Access violation at address 0778C733 in module 'wmp.dll'. Read of adress 00A2331C Beim schließen des Programms gibs dann nochmal dashier: Exception EAccessViolation in Module MdiAPP.exe at 00000000. Access violation at address 00000000 in module 'wmp.dll'. Read of adress 00000000 noch zum rest: das prog dient als eingabemaske für eine datebank (access, ADOQuery usw.) ich vermute das es am WMP liegt, da bei anderen Forms ohne den WMP keine probleme gibt. Wenn irgendwer ne idee hat was da komisches vor sich geht, ich bin für alles dankbar. falls noch informationen gebraucht werden, einfach bescheid sagen. Gruß schnickers |
Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
ich nehm mir mal die freiheit zu bumpen und zu fragen wo die heerscharen an antworten bleiben ;)
würd nur gern wissen warum keiner antwortet - Frage SO mieß formuliert, das ich gemieden werde? :cry: - keine hat ne idee? :shock: - es fehlen informationen? :?: - ich bin im falschen film? :cat: wie auch immer ;) also ich nehm jeden nochsoklitzekleinen vorschlag dankbar an und wenn er daraus bestehen sollte meine hose auf dem kopf zu tragen :roteyes: (besser nicht) mit komischem Gruß |
Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
hi und herzlich willkommen in der DP, schnickers :hi:
hast du schonmal den debugger bemüht, um heraus zu finden, an welcher zeile die Acces Violation auftritt? aenogym |
Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
Zitat:
falls du damit meinst, das ich mit breack an die stelle komme wo dann diese zeile eingefäbt bekomme, da zeigt der nichts an. mit jump tu cpu (das wird wohl nicht viel helfen) ist der code um die abbruchstelle ca. so:
Code:
ansonsten vieleicht noch wichtig. wenn ich z.b. 3 forms auf habe, dannbeim 2ten den fehler bekomme, und dann versuche diese form ochmal zu öffnen, passiert es manchmal, das ich die fehlermeldung bekomme, das diese form schon geöffnen ist bzw schon existiert
test ecx,[eax]
jz $0778c739 mov ecx,[eax] //hier springt er raus push eax |
Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
hm, ich meinte eigentlich, dass du mit F7 und F8 (Einzelschritt/gesamte Routine) zeile für zeile durchgehst. so siehst du, welche zeile zuletzt erfolgreich ausgeführt wird und wenn dann auch einmal die AV kommt, dann weißt du, welche zeile du jetzt bist - die ist dann der übeltäter.
allgemein kann ich nur vermuten, dass du beim schließen deines childs auf ein objekt zugreifst, das nicht initialisiert wurde... aenogym |
Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
Zitat:
also folgenden code führt er noch aus
Delphi-Quellcode:
nach (1) springt er in eine Fremdcomponente AdvMainMenü und bei dieser Function (ganz am ende):
procedure TFormDBAudio.FormClose(Sender: TObject; var Action: TCloseAction);
begin Action:= caFree end; procedure TFormDBAudio.FormDestroy(Sender: TObject); begin FormDBAudio:= nil; //(1) end;
Delphi-Quellcode:
(2) hier Springt er raus schmeißt er die fehlermeldung.
function MDIClientWndProc(hWnd: HWND; uMsg: Integer; WParam: WPARAM; lParam: LPARAM): LRESULT; {$IFNDEF TMSDOTNET} stdcall; {$ENDIF}
const SeparatorShortcut = $ABCD; WindowItemGroupIndex = $CD; var AdvMenu: TAdvMainMenu; MenuForm: TForm; Separator, NewItem: TMenuItem; i: Integer; ChildList: TStringList; begin if uMsg = WM_MDIREFRESHMENU then begin Result := 0; MenuForm := FindForm(GetParent(hWnd)); if (MenuForm <> nil) and (MenuForm.FormStyle = fsMDIForm) and (MenuForm.Menu <> nil) and (MenuForm.WindowMenu <> nil) and (MenuForm.Menu is TAdvMainMenu) then with MenuForm do begin AdvMenu := TAdvMainMenu(Menu); AdvMenu.BeginUpdate; Separator := AdvMenu.FindItem(SeparatorShortcut, fkShortcut); if Assigned(Separator) and (Separator.Caption = cLineCaption) then while Separator.MenuIndex + 1 < WindowMenu.Count do WindowMenu.Delete(Separator.MenuIndex + 1) else begin Separator := TMenuItem.Create(MenuForm.WindowMenu); Separator.Caption := cLineCaption; Separator.ShortCut := SeparatorShortcut; Separator.AutoLineReduction := maAutomatic; Separator.Visible := MenuForm.MDIChildCount > 0; WindowMenu.Add(Separator); end; ChildList := TStringList.Create; ChildList.Sorted := True; for i := 0 to MenuForm.MDIChildCount - 1 do ChildList.AddObject(MenuForm.MDIChildren[i].Caption, TObject(MenuForm.MDIChildren[i].Handle)); for i := 0 to ChildList.Count - 1 do begin NewItem := TMenuItem.Create(WindowMenu); with NewItem do begin Caption := IntToStr(i + 1) + ' ' + ChildList.Strings[i]; {$IFNDEF TMSDOTNET} Tag := THandle((ChildList.Objects[i])); {$ENDIF} OnClick := AdvMenu.ActivateMDIChild; RadioItem := True; GroupIndex := WindowItemGroupIndex; {$IFNDEF TMSDOTNET} Checked := Assigned(MenuForm.ActiveMDIChild) and (Tag = Integer(MenuForm.ActiveMDIChild.Handle)); {$ENDIF} end; WindowMenu.Add(NewItem); end; ChildList.Free; AdvMenu.EndUpdate; Result := AdvMenu.Handle; end; end else Result := CallWindowProc(IntPtr(GetWindowLong(hWnd, GWL_USERDATA)), hwnd, uMsg, wParam, lParam); ////(2) end; achja was mir gerade noch auffällt, wenn ich die fenster in der reihenfoge schließe wie ich sie öffne (Ältestes zuerest) kommt nicht(oder zumisndest sehr viel seltener) dieser fehler. gibts allgemein Probleme wenn, man den WMP shr oft aufhat? wei an dem mus es ja liegen, forms ohne den WMP machen keinerlei probleme. |
Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
mh, äußerst komisch. da kann ich dir leider auch nicht helfen :(
vielleicht kennt sich ja jemand anders in diesem forum besser damit aus... |
Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
und was ist wenn du die zeile
Delphi-Quellcode:
herausnimmst
FormDBAudio:= nil; //(1)
|
Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
Zitat:
1) (durch auskemmentiere des anweisung) keine fehlermeldungen mehr :spin2: 2) manche formen ließen sich nicht mehr öffnen nachdem ich sie geschlossen hatte. :? 3) die anweisungen wieder eingefügt (der code ist nun so wie vor 1) :coder: 4) keine fehlermeldung, offnen der forms wieder möglich :dance: ich bin nun total :shock: weil ich keine ahnung hab was hier geht, hat auf jedenfall funktioniert danke vielmals :thumb: kann nur hoffen das problem taucht nicht wieder auf (was ich vermute,... hmmmm) naa werd das ganze mal testen und nachher nochmal den status schreiben, bye schnickers |
Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
ok, ich packs nicht, ein problem das mich gut zwei wochen lang beschäftigt hat, und nun ist der code so wie vorher aber ohne fehlermeldungen (gutes altes computer phänomen wenn man mich fragt :mrgreen: )
in diesem sinne problem (vorerst gelößt) ich stell dann mal auf erledigt, danke nochmal an alle poster und helfer und an den weinachtsmann :xmas: mit weinachtlichem gruß schnickers |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz