Come creare un AxHost esclusivamente nel codice [C #]
Domanda
Sto utilizzando un wrapper COM per interagire con Windows Media Player.
Usando un AxHost per in qualche modo avvolgere il giocatore, per me è tutto solo magico sotto il cofano ^^
AxHost.AttachInterfaces è simile a questo
protected override void AttachInterfaces()
{
try
{
//Get the IOleObject for Windows Media Player.
IOleObject oleObject = this.GetOcx() as IOleObject;
//Set the Client Site for the WMP control.
oleObject.SetClientSite(this as IOleClientSite);
Player = this.GetOcx() as WMPLib.WindowsMediaPlayer;
...
Tutto funziona, purché ospito questo AxHost in un controllo di Windows Form. Ma non posso collegare gli eventi in un costruttore.
Questo ad esempio non funziona:
public WMPMediaRating()
{
var remote = new WMPRemote.RemotedWindowsMediaPlayer();
_WMP = remote.Player;
_WMP.MediaChange += new _WMPOCXEvents_MediaChangeEventHandler(_WMP_MediaChange);
}
remote.Player è sempre nullo e il programma si arresta in modo anomalo con NullReferencesException.
Il codice in AttachInterfaces () viene in qualche modo eseguito solo dopo che il Form è stato disegnato, o dopo che tutto il resto è stato fatto.
Ho provato a chiamare AttachInterfaces () a mano, ma non ha funzionato neanche perché GetOcx () non restituisce nulla.
Quindi, come posso istanziare il mio controllo ereditato da AxHost senza Windows Form, per usarlo ad esempio in un'applicazione console?
Soluzione
Cordiali saluti: nessuno ti impedisce di utilizzare una finestra nascosta nell'applicazione console.
Non sarai in grado di ospitare il lettore multimediale in un'applicazione non Windows - richiede l'hosting. Se vuoi riprodurre un po 'di musica, puoi utilizzare Media Graphs per creare un grafico che esegue il rendering (riproduce) il tuo file musicale - non richiederà alcun hosting aggiuntivo.