2008-09-19 7 views
1

J'utilise un wrapper COM pour interagir avec Windows Media Player.Comment créer un AxHost uniquement en code [C#]

Le qu'il utilise un AxHost pour envelopper en quelque sorte le joueur, pour moi, c'est tout simplement magique sous le capot ^^

Les 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 comme trouver tant que j'héberge cet AxHost dans un contrôle Windows Forms. Mais je ne peux pas connecter les événements dans un constructeur.

Cet 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 nul et le programme se bloque avec un NullReferencesException.

Le code dans AttachInterfaces() est en quelque sorte seulement exécuté après que le formulaire a été dessiné, ou après que tout le reste soit fait.

J'ai essayé d'appeler AttachInterfaces() à la main, mais cela n'a pas fonctionné car GetOcx() ne renvoie rien.


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

Merci

Répondre

1

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

Vous ne serez pas en mesure d'héberger le lecteur multimédia dans une application non-windows - il nécessite un hébergement. Si vous voulez jouer de la musique, vous pouvez utiliser les graphes média pour créer un graphique qui restitue (joue) votre fichier musical - il ne nécessitera aucun hébergement supplémentaire.