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