最近在写一个视频点播程序,基本思路是根据用户选择把视频文件添加到Windows Media Player的当前播放列表并播放。我用Delphi的Import ActiveX向导导入了wmp.dll(Windows Media Player Control 1.0),但是觉得这个组件的功能比起Windows Media Player本身要少很多,例如,这个组件只能以特定速度快进快退,而WMP本身则可以有几档速度快进快退。于是我想利用WMP本身来播放文件。查资料得知,可以使用WMP Control的“remote”模式来显示完整的播放器。我做的尝试不太成功,请高手解惑:1. 向播放列表添加文件失败var
  wmpPlayer: TWindowsMediaPlayer;  // TWindowsMediaPlayer是向导自动生成的Wrapper类
  media: IWMPMedia;
begin
  media := wmpPlayer.newMedia('C:\Test1.wmv');  // 这句出错
  //media := wmpPlayer.mediaCollection.add('C:\Test1.wmv');  // 这句顺利执行
  wmpPlayer.currentPlaylist.appendItem(media);
end;2. 实现远程模式根据MSDN,我手工修改了向导生成的WmpLib_TLB.pas,把TWindowsMediaPlayer类修改为TRemotedWindowsMediaPlayer,为TRemoteWindowsMediaPlayer类实现了IServiceProvider及IWMPRemoteMediaServices接口,并重新编译安装成功。运行后,检查wmpPlayer.isRemote,返回值为True。(这证明Remote模式已经实现?)但是以下代码出错:var
  wmpPlayer: TRemotedWindowsMediaPlayer;
  wmp4: IWMPPlayer4;
  app: IWMPPlayerApplication;
begin
  if wmpPlayer.isRemote then begin
    wmp4 := wmpPlayer.ControlInterface;
    app := wmp4.playerApplication;  // 这句出错
    app.switchToPlayerApplication;
  end;
end;找了很久都不知道原因在哪里,难道是Bug?