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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top