Question

J'utilise un wrapper COM pour interagir avec le lecteur Windows Media.

Il utilise un AxHost pour envelopper le joueur. Pour moi, tout est magique sous le capot ^^

AxHost.AttachInterfaces ressemble à ceci

    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; 
...

Tout fonctionne, tant que j'héberge cet AxHost dans un contrôle Windows Forms. Mais je ne peux pas brancher les événements dans un constructeur.

Ceci par exemple ne fonctionne pas:

    public WMPMediaRating()
    {
        var remote = new WMPRemote.RemotedWindowsMediaPlayer();
        _WMP = remote.Player;

        _WMP.MediaChange += new _WMPOCXEvents_MediaChangeEventHandler(_WMP_MediaChange);
    }

remote.Player est toujours null et le programme se bloque avec une exception NullReferencesException.

Le code dans AttachInterfaces () n'est en quelque sorte exécuté qu'après que le formulaire a été dessiné ou après que tout le reste soit terminé.

J'ai essayé d'appeler manuellement AttachInterfaces (), mais cela n'a pas fonctionné non plus, car GetOcx () ne renvoie rien.

Alors, comment puis-je instancier mon contrôle hérité AxHost sans Windows Forms, pour l'utiliser par exemple dans une application console?

Était-ce utile?

La solution

Pour info: personne ne vous empêche d’utiliser une fenêtre cachée dans votre application console.

Vous ne pourrez pas héberger le lecteur multimédia dans une application autre que Windows. Il nécessite un hébergement. Si vous souhaitez écouter de la musique, vous pouvez utiliser les graphes multimédias pour créer un graphe qui restitue (lit) votre fichier musical. Aucun hébergement supplémentaire ne sera nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top