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