Como criar um AxHost exclusivamente em código [C #]
Pergunta
Eu estou usando um wrapper para interagir com o Windows Media Player.
O que está usando um AxHost para envolver de alguma forma o jogador, para mim é tudo apenas mágica sob o capô ^^
Os AxHost.AttachInterfaces olhares como este
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;
...
Tudo está funcionando achado enquanto eu sediar este AxHost em um controle Windows Forms. Mas eu não posso ligar os eventos em um construtor.
Este, por exemplo, não funciona:
public WMPMediaRating()
{
var remote = new WMPRemote.RemotedWindowsMediaPlayer();
_WMP = remote.Player;
_WMP.MediaChange += new _WMPOCXEvents_MediaChangeEventHandler(_WMP_MediaChange);
}
remote.Player é sempre nulo eo programa trava com um NullReferencesException.
O código na AttachInterfaces () é de alguma forma única executado após o formulário foi elaborado, ou depois de tudo o resto é feito.
Eu tentei ligar AttachInterfaces () com a mão, mas isso não quer trabalhar porque GetOcx () retorna nada.
Então, como posso instanciar o meu controle herdado-AxHost sem Windows Forms, para usá-lo, por exemplo, em um aplicativo de console?
Solução
FYI:. Ninguém o impede de usar uma janela escondida em seu aplicativo de console
Você não vai ser capaz de hospedar o reprodutor de mídia em um aplicativo não-Windows - requer hospedagem. Se você quiser jogar alguma música que você pode usar o Gráficos de mídia para criar um gráfico que torna (execuções) seu arquivo de música -. Ele vai não requer qualquer hospedagem adicional