Как создать AxHost исключительно в коде [C #]

StackOverflow https://stackoverflow.com/questions/106081

  •  01-07-2019
  •  | 
  •  

Вопрос

Я использую COM-оболочку для взаимодействия с проигрывателем Windows Media.

Он использует 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);
    }

удаленный.Значение проигрывателя всегда равно нулю, и программа завершает работу с NullReferencesException.

Код в AttachInterfaces() каким-то образом выполняется только после того, как Форма была нарисована, или после того, как все остальное сделано.

Я попытался вызвать AttachInterfaces() вручную, но это тоже не сработало, потому что GetOcx() ничего не возвращает.


Итак, как я могу создать экземпляр моего элемента управления, унаследованного от AxHost, без Windows Forms, чтобы использовать его, например, в консольном приложении?

Это было полезно?

Решение

К ТВОЕМУ сведению:никто не мешает вам использовать скрытое окно в вашем консольном приложении.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top