Narf! Geschrieben 1. September 2004 Geschrieben 1. September 2004 Schönen guten Tag an alle, ich habe mal dieses Thema erstellt, weil mein Thema Umstellung von VC 6.0 auf VC .NET unübersichtlich wird, was den Media Player betrifft. Hier nochmal meine bisherige Vorgehensweise: Ich habe mit VC++ .NET eine dialogfeldbasierende MFC-Win32-Anwendung erstellt, in die ich den WMP 9 über ActiveX eingebunden habe. Die ID ist ID_OCX1_MedPlay und die Control-Variable ist m_cMedPlay. Es wurde eine Wrapper-Klasse erstellt, auf die ich mit m_cMedPlay Zugriff habe. Nun mein Problem: In der Wrapper-Klasse sind nicht die Funktionen enthalten, die ich brauche. Z.Bsp. double get_CurrentPosition(), welche mir die aktuelle Position in einer Sound-Datei angibt. Klotzkopp hat folgendes dazu geschrieben: Dann schau dir die Interface IWMPCore* und IWMPPlayer* an, da sollte alles dabei sein, was du brauchst. Wie komme ich an die Interfaces ran? Ich habe mir aus der MSDN Code-Beispiele runtergeladen (wmphost, usw.), die mir aber nicht weitergeholfen haben. Hat jemand 'ne Idee? Zitieren
Guybrush Threepwood Geschrieben 1. September 2004 Geschrieben 1. September 2004 Wie komme ich an die Interfaces ran? Wie meinst du das? AFAIK brauchst du das Media SDK um die nötigen Biblitheken und so zu bekommen. Um das Interface anzulegen solltest du dich ein bischen mit dem Component Object Model (COM) beschäftigen, falls du dich damit noch nicht auskennst:) Zitieren
Narf! Geschrieben 2. September 2004 Autor Geschrieben 2. September 2004 Um den WMP als Element der ToolBox hinzu zufügen, muss man den als COM-Objekt auswählen. Man setzt in der Liste einen Haken, und das war's. Danach zieht man den WMP auf den Dialog und setzt die Variable. Mehr habe ich nicht dazu getan. Ich weiß, dass ich mir aus Active-X-Elementen weitere Klassen erstellen lassen kann. Das habe ich auch mit den WMP-Klassen gemacht, die die entsprechenden Funktionen hatten. Aber wie weiter? Denn wenn ich eine Instanz-Variable auf diese Klassen erstelle, komme ich zwar an die Funktionen, aber es passiert nichts. Mit instanz.put_Filename("Datei.wav/mp3"); müsste der WMP das Abspielen anfangen, tut er aber nicht. Zitieren
Narf! Geschrieben 14. September 2004 Autor Geschrieben 14. September 2004 Also, ich habe mich exakt an die Hilfe aus der MSDN gehalten, habe alles so gemacht, wie es da stand, aber es stimmt nichts von den beschriebenen Ergebnissen. Zugegeben, es ist ja auch für VC++ 6.0 ausgeschrieben. Mit dem WMP 7.1 hat es damals genau so hingehauen. Da hatte ich alle Funktionen, die ich brauchte, nur durch das Setzen der Control-Variable auf das ActiveX-Control. Warum macht es der 9er so kompliziert, oder liegt es an VC++ 7? Hat jemand Erfahrungen mit dem 9er und VC++ 7? Zitieren
Narf! Geschrieben 24. September 2004 Autor Geschrieben 24. September 2004 So, nun habe ich das mit den Interfaces auch ein bisschen verstanden. Es sieht jetzt so aus: ProgramDlg.h: #pragma once #include "ocx1_medplay.h" //die Wrapper-Klasse vom MediaPlayer #include "E:\WMSDK\WMPSDK9\include\wmp.h" //die wmp.h aus dem SDK ProgramDlg.cpp: void CProgramDlg::OnBnClickedButton10() { m_cMedPlay.put_URL("Datei.mp3"); //hiermit lade ich eine Datei in den Player; wird abgespielt }//end void CProgramDlg::OnBnClickedButton10() void CProgramDlg::OnBnClickedButton2Pos() { double Pos=0.0; IWMPControls::get_currentPosition(&Pos); //hiermit wollte ich die aktuelle Position anzeigen lassen, aber: s.u. }//end void CProgramDlg::OnBnClickedButton2Pos() Fehlermeldung: f:\ProgramDlg.cpp(100) : error C2352: 'IWMPControls::get_currentPosition::IWMPControls::get_currentPosition': Unzulässiger Aufruf einer nicht statischen Memberfunktion e:\WMSDK\WMPSDK9\include\wmp.h(1342): Siehe Deklaration von 'IWMPControls::get_currentPosition' Erst seit die wmp.h aus dem SDK drin ist, komme ich an die Interfaces ran. Was mache ich denn falsch!?! Zitieren
Guybrush Threepwood Geschrieben 24. September 2004 Geschrieben 24. September 2004 Erm du kannst doch die Funktion nicht einfach über die Klasse aufrufen (statisch), sondern du brauchst eine Instanz der Klasse über die du die Funktion aufrufst. Zitieren
Narf! Geschrieben 24. September 2004 Autor Geschrieben 24. September 2004 Bedeutet das, dass ich mir aus der wmp.h z.Bsp. die Klasse IWMPControls erstellen lasse, dann in der Funktion, in der ich die Position abfrage, eine Instanzvariable erstelle und dann erst an die Funktionen rankomme? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.