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