Re: IWMReader::Open Causes Unhandled Win32 exception
From: bzirk (bzirk_at_discussions.microsoft.com)
Date: 10/15/04
- Next message: Grant Schenck: "Re: WaveIn notification methods"
- Previous message: Chris P. [MVP]: "Re: WaveIn notification methods"
- In reply to: Alessandro Angeli [MVP::DigitalMedia]: "Re: IWMReader::Open Causes Unhandled Win32 exception"
- Messages sorted by: [ date ] [ thread ]
Date: Fri, 15 Oct 2004 13:49:11 -0700
Alessandro,
I got your code and it worked as advertised. I then took your interface
signatures and dropped them into my app. This changed the behavior somewhat,
but I still was experiencing some calls that seemingly never returned. I
began stripping down my app and discovered that the problem seems to be tied
to raising events whithin my reader class. I'm still trying a few things to
further isolate the issue. Thanks a ton for your help!
BZ
"Alessandro Angeli [MVP::DigitalMedia]" wrote:
> bzirk wrote:
>
> > Sorry to keep buggin' you, but could this be a threading
> > issue?
>
> I don't see what you may be doing that would block
> GetOutputCount() (I can't see what could block Start() or
> Close() either). Here is my working code:
>
> -----------------------------------
> IMPORTS System
> IMPORTS System.Threading
> IMPORTS System.Runtime.InteropServices
>
> PUBLIC MODULE Main
> SUB Main(BYVAL args() AS String)
> Console.WriteLine("*** VB!")
> DIM reader AS MyReader = NEW MyReader
> reader.Open(args(0))
> END SUB
> END MODULE
>
> PUBLIC CLASS MyReader
> IMPLEMENTS IWMReaderCallback
>
> <DllImport("WMVCore.dll", SetLastError := true, _
> CharSet := CharSet.Unicode, ExactSpelling := true, _
> CallingConvention := CallingConvention.StdCall, _
> PreserveSig := false)> _
> PUBLIC SHARED FUNCTION WMCreateReader( _
> <MarshalAs(UnmanagedType.IUnknown)> pUnkCert AS Object, _
> dwRights AS Integer) AS IWMReader
> END FUNCTION
>
> PRIVATE hEvent AS AutoResetEvent = new
> AutoResetEvent(FALSE)
> PRIVATE sampleCount AS Integer = 0
>
> SUB Open(url AS String)
> DIM pReader AS IWMReader = WMCreateReader(NOTHING,0)
> pReader._Open(url,ME,ME)
> hEvent.WaitOne() ' WMT_OPENED
>
> DIM outputs AS Integer = pReader.GetOutputCount()
> Console.WriteLine(">>> outputs = " & outputs)
>
> pReader._Start(0,0,1.0,ME)
> hEvent.WaitOne() ' WMT_STARTED
> hEvent.WaitOne() ' sampleCount
> pReader._Stop()
> hEvent.WaitOne() ' WMT_STOPPED
> pReader._Close()
> hEvent.WaitOne() ' WMT_CLOSED
> END SUB
>
> SUB OnStatus( _
> Status AS WMT_STATUS, _
> hr AS Integer, _
> dwType AS WMT_ATTR_DATATYPE, _
> BYREF pValue AS Byte, _
> <MarshalAs(UnmanagedType.IUnknown)> pvContext AS Object) _
> IMPLEMENTS IWMReaderCallback.OnStatus
>
> DIM pReader AS MyReader = pvContext
>
> Console.WriteLine("*** OnStatus({0},0x{1:X8})",Status,hr)
>
> SELECT Status
> CASE WMT_STATUS.WMT_OPENED
> pReader.hEvent.Set()
> CASE WMT_STATUS.WMT_STARTED
> pReader.hEvent.Set()
> CASE WMT_STATUS.WMT_STOPPED
> pReader.hEvent.Set()
> CASE WMT_STATUS.WMT_CLOSED
> pReader.hEvent.Set()
> END SELECT
> END SUB
> SUB OnSample( _
> dwOutputNum AS Integer, _
> cnsSampleTime AS Long, _
> cnsSampleDuration AS Long, _
> dwFlags AS Integer, _
> <MarshalAs(UnmanagedType.Interface)> pSample AS
> INSSBuffer, _
> <MarshalAs(UnmanagedType.IUnknown)> pvContext AS Object) _
> IMPLEMENTS IWMReaderCallback.OnSample
>
> DIM pReader AS MyReader = pvContext
>
> Console.WriteLine("*** OnSample(" & dwOutputNum & ")")
>
> sampleCount = sampleCount + 1
> IF sampleCount > 5 THEN pReader.hEvent.Set()
> END SUB
> END CLASS
>
> <Guid("96406BD6-2B2B-11d3-B36B-00C04F6108FF"),InterfaceType(
> ComInterfaceType.InterfaceIsIUnknown)> _
> PUBLIC INTERFACE IWMReader
> SUB _Open( _
> <MarshalAs(UnmanagedType.LPWStr)> pwszURL AS String, _
> <MarshalAs(UnmanagedType.Interface)> pCallback AS
> IWMReaderCallback, _
> <MarshalAs(UnmanagedType.IUnknown)> pvContext AS Object)
> SUB _Close()
> FUNCTION GetOutputCount() AS Integer
> FUNCTION GetOutputProps( _
> dwOutputNum AS Integer) AS
> <MarshalAs(UnmanagedType.Interface)> IWMOutputMediaProps
> SUB SetOutputProps( _
> dwOutputNum AS Integer, _
> <MarshalAs(UnmanagedType.Interface)> pOutput AS
> IWMOutputMediaProps)
> FUNCTION GetOutputFormatCount( _
> dwOutputNumber AS Integer) AS Integer
> FUNCTION GetOutputFormat( _
> dwOutputNumber AS Integer, _
> dwFormatNumber AS Integer) AS
> <MarshalAs(UnmanagedType.Interface)> IWMOutputMediaProps
> SUB _Start( _
> cnsStart AS Long, _
> cnsDuration AS Long, _
> fRate AS Single, _
> <MarshalAs(UnmanagedType.IUnknown)> pvContext AS Object)
> SUB _Stop()
> SUB _Pause()
> SUB _Resume()
> END INTERFACE
>
> <Guid("96406BD8-2B2B-11d3-B36B-00C04F6108FF"),InterfaceType(
> ComInterfaceType.InterfaceIsIUnknown)> _
> PUBLIC INTERFACE IWMReaderCallback
> SUB OnStatus( _
> Status AS WMT_STATUS, _
> hr AS Integer, _
> dwType AS WMT_ATTR_DATATYPE, _
> BYREF pValue AS Byte, _
> <MarshalAs(UnmanagedType.IUnknown)> pvContext AS Object)
> SUB OnSample( _
> dwOutputNum AS Integer, _
> cnsSampleTime AS Long, _
> cnsSampleDuration AS Long, _
> dwFlags AS Integer, _
> <MarshalAs(UnmanagedType.Interface)> pSample AS
> INSSBuffer, _
> <MarshalAs(UnmanagedType.IUnknown)> pvContext AS Object)
> END INTERFACE
>
> <Guid("96406BD7-2B2B-11d3-B36B-00C04F6108FF"),InterfaceType(
> ComInterfaceType.InterfaceIsIUnknown)> _
> PUBLIC INTERFACE IWMOutputMediaProps
> ' TODO: ...
> END INTERFACE
>
> <Guid("E1CD3524-03D7-11d2-9EED-006097D2D7CF"),InterfaceType(
> ComInterfaceType.InterfaceIsIUnknown)> _
> PUBLIC INTERFACE INSSBuffer
> ' TODO: ...
> END INTERFACE
>
> PUBLIC ENUM WMT_STATUS AS Integer
> WMT_ERROR = 0
> WMT_OPENED = 1
> WMT_BUFFERING_START = 2
> WMT_BUFFERING_STOP = 3
> WMT_EOF = 4
> WMT_END_OF_FILE = 4
> WMT_END_OF_SEGMENT = 5
> WMT_END_OF_STREAMING = 6
> WMT_LOCATING = 7
> WMT_CONNECTING = 8
> WMT_NO_RIGHTS = 9
> WMT_MISSING_CODEC = 10
> WMT_STARTED = 11
> WMT_STOPPED = 12
> WMT_CLOSED = 13
> WMT_STRIDING = 14
> WMT_TIMER = 15
> WMT_INDEX_PROGRESS = 16
> WMT_SAVEAS_START = 17
> WMT_SAVEAS_STOP = 18
> WMT_NEW_SOURCEFLAGS = 19
> WMT_NEW_METADATA = 20
> WMT_BACKUPRESTORE_BEGIN = 21
> WMT_SOURCE_SWITCH = 22
> WMT_ACQUIRE_LICENSE = 23
> WMT_INDIVIDUALIZE = 24
> WMT_NEEDS_INDIVIDUALIZATION = 25
> WMT_NO_RIGHTS_EX = 26
> WMT_BACKUPRESTORE_END = 27
> WMT_BACKUPRESTORE_CONNECTING = 28
> WMT_BACKUPRESTORE_DISCONNECTING = 29
> WMT_ERROR_WITHURL = 30
> WMT_RESTRICTED_LICENSE = 31
> WMT_CLIENT_CONNECT = 32
> WMT_CLIENT_DISCONNECT = 33
> WMT_NATIVE_OUTPUT_PROPS_CHANGED = 34
> WMT_RECONNECT_START = 35
> WMT_RECONNECT_END = 36
> WMT_CLIENT_CONNECT_EX = 37
> WMT_CLIENT_DISCONNECT_EX = 38
> WMT_SET_FEC_SPAN = 39
> WMT_PREROLL_READY = 40
> WMT_PREROLL_COMPLETE = 41
> WMT_CLIENT_PROPERTIES = 42
> WMT_LICENSEURL_SIGNATURE_STATE = 43
> END ENUM
>
>
> PUBLIC ENUM WMT_ATTR_DATATYPE AS Integer
> WMT_TYPE_DWORD = 0
> WMT_TYPE_STRING = 1
> WMT_TYPE_BINARY = 2
> WMT_TYPE_BOOL = 3
> WMT_TYPE_QWORD = 4
> WMT_TYPE_WORD = 5
> WMT_TYPE_GUID = 6
> END ENUM
> -----------------------------------
>
> --
>
> // Alessandro Angeli
> // MVP :: Digital Media
> // a dot angeli at psynet dot net
>
>
>
>
- Next message: Grant Schenck: "Re: WaveIn notification methods"
- Previous message: Chris P. [MVP]: "Re: WaveIn notification methods"
- In reply to: Alessandro Angeli [MVP::DigitalMedia]: "Re: IWMReader::Open Causes Unhandled Win32 exception"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|