private static HRESULT GetData(IntPtr thisPtr, FORMATETC *format, STGMEDIUM_Raw *pMedium) { var instance = ComInterfaceDispatch.GetInstance <IDataObject>((ComInterfaceDispatch *)thisPtr); try { instance.GetData(ref *format, out var medium); pMedium->pUnkForRelease = medium.pUnkForRelease == null ? IntPtr.Zero : Marshal.GetIUnknownForObject(medium.pUnkForRelease); pMedium->tymed = medium.tymed; pMedium->unionmember = medium.unionmember; return(HRESULT.S_OK); } catch (Exception ex) { Debug.WriteLine(ex); return((HRESULT)ex.HResult); } }
private static HRESULT SetData(IntPtr thisPtr, FORMATETC *format, STGMEDIUM_Raw *pMedium, int release) { var instance = ComInterfaceDispatch.GetInstance <IDataObject>((ComInterfaceDispatch *)thisPtr); try { STGMEDIUM medium = new() { pUnkForRelease = pMedium->pUnkForRelease == IntPtr.Zero ? null : Marshal.GetObjectForIUnknown(pMedium->pUnkForRelease), tymed = pMedium->tymed, unionmember = pMedium->unionmember, }; instance.SetData(ref *format, ref medium, release != 0); return(HRESULT.S_OK); } catch (Exception ex) { Debug.WriteLine(ex); return((HRESULT)ex.HResult); } }
private static unsafe HRESULT GetDataHere(IntPtr thisPtr, FORMATETC *format, STGMEDIUM_Raw *pMedium) { var instance = ComInterfaceDispatch.GetInstance <IDataObject>((ComInterfaceDispatch *)thisPtr); try { STGMEDIUM medium = new() { pUnkForRelease = pMedium->pUnkForRelease == IntPtr.Zero ? null : Marshal.GetObjectForIUnknown(pMedium->pUnkForRelease), tymed = pMedium->tymed, unionmember = pMedium->unionmember, }; instance.GetDataHere(ref *format, ref medium); pMedium->pUnkForRelease = medium.pUnkForRelease == null ? IntPtr.Zero : Marshal.GetIUnknownForObject(medium.pUnkForRelease); pMedium->tymed = medium.tymed; pMedium->unionmember = medium.unionmember; return(HRESULT.S_OK); } catch (Exception ex) { Debug.WriteLine(ex); return((HRESULT)ex.HResult); } }