Я использую COM Wrapper для взаимодействия с Windows Media Player.
Он использует AxHost, чтобы каким-то образом обернуть плеер, для меня все это просто магия под капотом ^^
AxHost.AttachInterfaces выглядит следующим образом
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;
...
Все работает, пока я размещаю этот AxHost в элементе управления Windows Forms. Но я не могу подключить события в конструкторе.
Это, например, не работает:
public WMPMediaRating()
{
var remote = new WMPRemote.RemotedWindowsMediaPlayer();
_WMP = remote.Player;
_WMP.MediaChange += new _WMPOCXEvents_MediaChangeEventHandler(_WMP_MediaChange);
}
remote.Player всегда равен нулю, и программа завершается с ошибкой NullReferencesException.
Код в AttachInterfaces () каким-то образом выполняется только после того, как форма нарисована, или после того, как все остальное сделано.
Я пытался вызвать AttachInterfaces () вручную, но это тоже не сработало, потому что GetOcx () ничего не возвращает.
Так как мне создать экземпляр моего унаследованного AxHost элемента управления без Windows Forms, чтобы использовать его, например, в консольном приложении?