Как создать AxHost исключительно в коде [C #] - PullRequest
1 голос
/ 20 сентября 2008

Я использую 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, чтобы использовать его, например, в консольном приложении?

1 Ответ

1 голос
/ 20 сентября 2008

К вашему сведению: никто не мешает вам использовать скрытое окно в вашем консольном приложении.

Вы не сможете разместить медиаплеер в приложении, отличном от Windows - оно требует хостинга. Если вы хотите воспроизвести какую-либо музыку, вы можете использовать Media Graphs для создания графика, который воспроизводит (воспроизводит) ваш музыкальный файл - для него не требуется никакого дополнительного хостинга.

...