Exemple #1
0
        private void SetData(byte[] data, string formatName, TYMED tymed)
        {
            IntPtr ptrToHandle = Marshal.AllocHGlobal(data.Length);

            try
            {
                Marshal.Copy(data, 0, ptrToHandle, data.Length);

                FORMATETC format = new FORMATETC
                {
                    cfFormat = (short)DataFormats.GetFormat(formatName).Id,
                    dwAspect = DVASPECT.DVASPECT_CONTENT,
                    lindex   = -1,
                    ptd      = (IntPtr)0,
                    tymed    = tymed
                };

                STGMEDIUM medium = new STGMEDIUM
                {
                    unionmember    = ptrToHandle,
                    tymed          = TYMED.TYMED_HGLOBAL,
                    pUnkForRelease = 0
                };

                dataObject.SetData(ref format, ref medium, false);
            }
            finally
            {
                Marshal.FreeHGlobal(ptrToHandle);
            }
        }
Exemple #2
0
        private byte[] GetData(string formatName, TYMED tymed)
        {
            FORMATETC format = new FORMATETC
            {
                cfFormat = (short)DataFormats.GetFormat(formatName).Id,
                dwAspect = DVASPECT.DVASPECT_CONTENT,
                lindex   = -1,
                ptd      = (IntPtr)0,
                tymed    = tymed
            };

            STGMEDIUM medium = new STGMEDIUM
            {
                tymed          = TYMED.TYMED_NULL,
                pUnkForRelease = 0
            };

            dataObject.GetData(ref format, out medium);

            HandleRef handleRef = new HandleRef(null, medium.unionmember);

            try
            {
                IntPtr ptrToHandle = GlobalLock(handleRef);
                int    length      = GlobalSize(handleRef);
                byte[] data        = new byte[length];
                Marshal.Copy(ptrToHandle, data, 0, length);
                return(data);
            }
            finally
            {
                GlobalUnlock(handleRef);
            }
        }