[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.platform.swt] Re: MS-Mediaplayer don't work

Hi Hanspeter

I have used the following statements:
  setLayout(new FillLayout());
  frame = new OleFrame(this, SWT.BORDER);
  frame.setSize(246, 250);
  site = new OleControlSite(frame, SWT.NONE, "WMPlayer.OCX");
  auto = new OleAutomation(site);
  mediaPlayer = new MediaPlayer(auto);
  site.doVerb(OLE.OLEIVERB_SHOW);

And then I added the following statement that magically prevents a crash 
when closing the widget.
  // Prevent crash of JVM at shutdown of player
 setFocus();

After that I do some initialization of the player.
The computeSize() is overridden:

  int w = mediaPlayer.getImageSourceWidth();
  int h = mediaPlayer.getImageSourceHeight();
  size.x = (w == 0 ? 246 : w);
  size.y = (h == 0 ? 250 : h);
  return size;

It is very difficult to get it right, I don't know who to blame.

Kind regards,

Jaap Reitsma


"Hanspeter" <schmuhan@xxxxxxxxxxxxxx> wrote in message 
news:8429e3e06470fbba075bce3049885ac1$1@xxxxxxxxxxxxxxxxxx
>I like to write a MediaPlayer-widget for WMP V9 acting like SWT.Browser. 
>I'm always receiving an unexpected exception if I activate it with:
>
>  site.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
>
> An unexpected exception has been detected in native code outside the VM.
> Unexpected Signal : EXCEPTION_ACCESS_VIOLATION (0xc0000005) occurred at 
> PC=0x4B64F839
> Function=DllGetClassObject+0x2E8C4
> Library=C:\WINNT\system32\wmp.dll
>
> If I activate it with "OLEIVERB_SHOW" doesn't occur an exception but it 
> doesn't show the video using all the frame space.
>
> I'm new to SWT and OLE and I hope you can give me same help or is this an 
> problem with MS-MediaPlayer?
>
> Thanks Hanspeter
>
> parts of the code:
>
> public class MMediaPlayer extends Composite
> {
>
>   OleFrame frame;
>   OleControlSite site;
>   OleAutomation auto;
>
>   public MMediaPlayer(Composite parent, int style)
>   {
>     super(parent, style & ~SWT.BORDER);
>     frame = new OleFrame(this, SWT.NONE);
>     try
>     {
>       site = new OleControlSite(frame, SWT.NONE, "WMPlayer.OCX.7"); 
> //$NON-NLS-1$
>     }
>     catch (SWTException e)
>     {
>       dispose();
>       SWT.error(SWT.ERROR_NO_HANDLES);
>     }
>     site.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
>     auto = new OleAutomation(site);
>   }
>
>   public String getStatus()
>   {
>     checkWidget();
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "status" }); //$NON-NLS-1$
>     Variant pVarResult = auto.getProperty(rgdispid[0]);
>     if (pVarResult == null || pVarResult.getType() != OLE.VT_BSTR) return 
> "";
>     String result = pVarResult.getString();
>     pVarResult.dispose();
>     return result;
>   }
>
>   public boolean isRemote()
>   {
>     checkWidget();
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "isRemote" }); //$NON-NLS-1$
>     Variant pVarResult = auto.getProperty(rgdispid[0]);
>     if (pVarResult == null || pVarResult.getType() != OLE.VT_BOOL) return 
> false;
>     boolean result = pVarResult.getBoolean();
>     pVarResult.dispose();
>     return result;
>   }
>
>   public boolean setUiMode(String mode)
>   {
>     checkWidget();
>     if (mode == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "uiMode" }); //$NON-NLS-1$
>     boolean result = auto.setProperty(rgdispid[0], new Variant(mode));
>     return result;
>   }
>
>   public boolean setMpEnabled(boolean mode)
>   {
>     checkWidget();
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "enabled" }); //$NON-NLS-1$
>     boolean result = auto.setProperty(rgdispid[0], new Variant(mode));
>     return result;
>   }
>
>   public boolean setStretchToFit(boolean mode)
>   {
>     checkWidget();
>     int[] rgdispid = auto.getIDsOfNames(new String[]{ "stretchToFit" }); 
> //$NON-NLS-1$
>     boolean result = auto.setProperty(rgdispid[0], new Variant(mode));
>     return result;
>   }
>
>   public boolean setAutoStart(boolean mode)
>   {
>     checkWidget();
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "settings" }); //$NON-NLS-1$
>     Variant pVarResult = auto.getProperty(rgdispid[0]);
>     if (pVarResult == null || pVarResult.getType() == 0) return false;
>     OleAutomation settings = pVarResult.getAutomation();
>     rgdispid = settings.getIDsOfNames(new String[]
>     { "autoStart" }); //$NON-NLS-1$
>     boolean result = settings.setProperty(rgdispid[0], new Variant(mode));
>     settings.dispose();
>     return result;
>   }
>
>   public boolean setWindowlessVideo(boolean mode)
>   {
>     checkWidget();
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "windowlessVideo" }); //$NON-NLS-1$
>     boolean result = auto.setProperty(rgdispid[0], new Variant(mode));
>     return result;
>   }
>
>   public boolean setFullScreen(boolean mode)
>   {
>     checkWidget();
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "fullScreen" }); //$NON-NLS-1$
>     boolean result = auto.setProperty(rgdispid[0], new Variant(mode));
>     return result;
>   }
>
>   public boolean setUrl(String url)
>   {
>     checkWidget();
>     if (url == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "URL" }); //$NON-NLS-1$
>     boolean result = auto.setProperty(rgdispid[0], new Variant(url));
>     return result;
>   }
>
>   public void play()
>   {
>     checkWidget();
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "controls" }); //$NON-NLS-1$
>     Variant pVarResult = auto.getProperty(rgdispid[0]);
>     if (pVarResult == null || pVarResult.getType() == 0) return;
>     OleAutomation controls = pVarResult.getAutomation();
>     rgdispid = controls.getIDsOfNames(new String[]
>     { "play" }); //$NON-NLS-1$
>     controls.invoke(rgdispid[0]);
>     pVarResult.dispose();
>     controls.dispose();
>   }
>
>   public void stop()
>   {
>     checkWidget();
>     int[] rgdispid = auto.getIDsOfNames(new String[]
>     { "controls" }); //$NON-NLS-1$
>     Variant pVarResult = auto.getProperty(rgdispid[0]);
>     if (pVarResult == null || pVarResult.getType() == 0) return;
>     OleAutomation controls = pVarResult.getAutomation();
>     rgdispid = controls.getIDsOfNames(new String[]
>     { "stop" }); //$NON-NLS-1$
>     controls.invoke(rgdispid[0]);
>     pVarResult.dispose();
>     controls.dispose();
>   }
>
> }
>