2008-09-19 60 views
1

我正在使用COM Wrapper與Windows Media Player進行交互。如何僅在代碼中創建AxHost [C#]

的是使用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; 
... 

下的一切都只是魔術正在爲找到只要我在Windows窗體控件中託管這個AxHost。但我無法在構造函數中掛接事件。

例如,這不起作用:

public WMPMediaRating() 
    { 
     var remote = new WMPRemote.RemotedWindowsMediaPlayer(); 
     _WMP = remote.Player; 

     _WMP.MediaChange += new _WMPOCXEvents_MediaChangeEventHandler(_WMP_MediaChange); 
    } 

remote.Player總是空,程序與NullReferencesException崩潰。

AttachInterfaces()中的代碼以某種方式只在Form被繪製完畢或其他所有事情完成後執行。

我試過用手調用AttachInterfaces(),但是這並不起作用,因爲GetOcx()什麼都不返回。


那麼,如何在沒有Windows窗體的情況下實例化我的AxHost繼承的控件,以便在控制檯應用程序中使用它?

感謝

回答

1

FYI:沒有人阻止你在你的控制檯應用程序使用一個隱藏的窗口。

您將無法將媒體播放器託管在非Windows應用程序中 - 它需要託管。如果你想播放一些音樂,你可以使用媒體圖形創建一個圖形來呈現(播放)你的音樂文件 - 它不需要任何額外的託管。