none
Microsoft Media Player 跨系統問題 RRS feed

  • 問題

  • 目前所遇到的問題,如下所示:

    1)首先說明,我的需求:

       必須在軟體中,加入播放影片的功能。

    2)接著說明,目前的做法

       直接採用   AxWMPLib.AxWindowsMediaPlayer axWindowsMediaPlayer1; 

    3)最後說明,所遇到的問題

       當使用者,未使用Media Player 9以上的版本時,即無法使用該影片播放功能。

     

    請教各位大大,是否也有處理過類似的問題,或者是否有其它的想法。

     

    2010年7月26日 上午 02:56

解答

  • 如果不能用WPF, 用Windows Media Player就要依賴Windows Media Player版本的功能了, 即使用Late Binding技巧, 使用到底層的Windows Media Player未提供的功能, 反而會發生runtime-error, 情況不會更好

    • 已標示為解答 Lolota Lee 2010年8月2日 下午 03:43
    2010年7月27日 上午 08:09

所有回覆

  • 您可以考慮使用WPF技術:Play Media Files in WPF
    2010年7月26日 上午 05:43
  • 大大謝謝您的回覆:

       因此一版次,需於win2000sp4上的機器執行,故 wpf(.net framework)應無法於此一平台上執行。

       我有Servey到其它的做法。如:以 late binding.的方式進行

      

    ***** My Solution of Late Binding to Use WMP ActiveX Control *****
    
    Step1. Run this command on the wmv.dll file:
    C:\WINDOWS\system32>aximp.exe wmp.dll /source
    (aximp.exe is from framework sdk)
    The command generates three files:
    Generated Source: C:\WINDOWS\system32\AxWMPLib.cs
    Generated Assembly: C:\WINDOWS\system32\WMPLib.dll
    Generated Assembly: C:\WINDOWS\system32\AxWMPLib.dll
    
    The source file AxWMPLib.cs is actually the source of AxWMPLib.dll wrapping
    the ActiveX control (WMPLib). AxWMPLib.cs uses early binding to reference
    the RCW dll (WMPLib.dll):
    private WMPLib.IWMPPlayer4 ocx;
    
    Step2. Add the source file AxWMPLib.cs to your .NET project. (please do not
    add the rest DLLs. If AxWMPLib.dll and WMPLib.dll are already referenced by
    your project, please remove them)
    After adding the file, you will find the project cannot parse the
    compilation for lack of the definition of WMPLib.IWMPPlayer4. In the next
    step, we will convert all the early binding codes to late binding and
    eliminate the errors.
    
    Step3. Convert all the early binding codes in AxWMPLib.cs to late binding.
    
    A. Change the line
    private WMPLib.IWMPPlayer4 ocx;
    to
    private object ocs;
    
    B. Change the code
    this.ocx = ((WMPLib.IWMPPlayer4)(this.GetOcx()));
    to
    this.ocx = this.GetOcx();
    
    C. Change all the occurrences of get/set ocx's properties to use late
    binding:
    For example, Change
    this.ocx.URL = value;
    to
    ocx.GetType().InvokeMember("URL",
    System.Reflection.BindingFlags.SetProperty, null, ocx, new object[]{ value
    });
    
    Step 4. Use the control in our winform:
    
    AxWMPLib.AxWindowsMediaPlayer axWindowsMediaPlayer1 = new
    AxWMPLib.AxWindowsMediaPlayer();
    ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).Beg
    inInit();
    axWindowsMediaPlayer1.Enabled = true;
    axWindowsMediaPlayer1.Location = new System.Drawing.Point(0, 0);
    axWindowsMediaPlayer1.Name = "axWindowsMediaPlayer1";
    axWindowsMediaPlayer1.OcxState =
    ((System.Windows.Forms.AxHost.State)(resources.GetObject("axWindowsMediaPlay
    er1.OcxState")));
    axWindowsMediaPlayer1.Size = new System.Drawing.Size(292, 273);
    axWindowsMediaPlayer1.TabIndex = 0;
    // add the control to the current form:
    this.Controls.Add(this.axWindowsMediaPlayer1);
    ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).End
    Init();
    
    

       但是若不參考WMPLib.dll時,我轉成 late binding.的方式時,就不知如何下手了...

       可是若參考WMPLib.dll時,我在windows2000sp4(Media player 7.1時)下執行時,會出錯.... (update 至Media Player 9時可正常執行)

       還請大大多多指導.... 不參考WMPLib.dll時,如何轉成 late binding.的方式。

    2010年7月26日 上午 09:30
  • 如果不能用WPF, 用Windows Media Player就要依賴Windows Media Player版本的功能了, 即使用Late Binding技巧, 使用到底層的Windows Media Player未提供的功能, 反而會發生runtime-error, 情況不會更好

    • 已標示為解答 Lolota Lee 2010年8月2日 下午 03:43
    2010年7月27日 上午 08:09