byte[] ExtractVerbData(NativeMethods.BINDINFO bindinfo) { if (bindinfo.cbstgmedData == 0)//|| bindinfo.stgmedData==IntPtr.Zero ) { return(null); } NativeMethods.STGMEDIUM med = bindinfo.stgmedData;// (NativeMethods.STGMEDIUM)( Marshal.PtrToStructure(bindinfo.stgmedData,typeof(NativeMethods.STGMEDIUM)) ); if ((med.tymed & NativeMethods.TYMED.TYMED_HGLOBAL) == 0) { return(null); } IStream pStream = null; int hresult = NativeMethods.CreateStreamOnHGlobal( med.hGlobal, 0, out pStream); Marshal.ThrowExceptionForHR(hresult); try { if (pStream == null) { return(null); } byte[] result = new byte[(int)bindinfo.cbstgmedData]; pStream.Read(result, result.Length, IntPtr.Zero); return(result); } finally { Marshal.ReleaseComObject(pStream); } }
/////////////////////////////////////////////////////////////////////////// // IAdviseSink Implementation void NativeMethods.IAdviseSink.OnDataChange(NativeMethods.FORMATETC pFormat, NativeMethods.STGMEDIUM pStg) { }