[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();
> }
>
> }
>