internal static IntPtr GetUnmanaged() { DataObjectStruct data_object; IntPtr data_object_ptr; long offset; data_object = new DataObjectStruct(); data_object.QueryInterface = Win32DnD.DOQueryInterface; data_object.AddRef = Win32DnD.DOAddRef; data_object.Release = Win32DnD.DORelease; data_object.GetData = Win32DnD.GetData; data_object.GetDataHere = Win32DnD.GetDataHere; data_object.QueryGetData = Win32DnD.QueryGetData; data_object.GetCanonicalFormatEtc = Win32DnD.GetCanonicalFormatEtc; data_object.SetData = Win32DnD.SetData; data_object.EnumFormatEtc = Win32DnD.EnumFormatEtc; data_object.DAdvise = Win32DnD.DAdvise; data_object.DUnadvise = Win32DnD.DUnadvise; data_object.EnumDAdvise = Win32DnD.EnumDAdvise; data_object_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(DataObjectStruct))); Marshal.StructureToPtr(data_object, data_object_ptr, false); // Update vtbl pointer offset = data_object_ptr.ToInt64(); offset += Marshal.SizeOf(typeof(IntPtr)); Marshal.WriteIntPtr(data_object_ptr, new IntPtr(offset)); return(data_object_ptr); }
internal static IntPtr GetUnmanaged() { DataObjectStruct data_object; IntPtr data_object_ptr; long offset; data_object = new DataObjectStruct(); data_object.QueryInterface = Win32DnD.DOQueryInterface; data_object.AddRef = Win32DnD.DOAddRef; data_object.Release = Win32DnD.DORelease; data_object.GetData = Win32DnD.GetData; data_object.GetDataHere = Win32DnD.GetDataHere; data_object.QueryGetData = Win32DnD.QueryGetData; data_object.GetCanonicalFormatEtc = Win32DnD.GetCanonicalFormatEtc; data_object.SetData = Win32DnD.SetData; data_object.EnumFormatEtc = Win32DnD.EnumFormatEtc; data_object.DAdvise = Win32DnD.DAdvise; data_object.DUnadvise = Win32DnD.DUnadvise; data_object.EnumDAdvise = Win32DnD.EnumDAdvise; data_object_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(DataObjectStruct))); Marshal.StructureToPtr(data_object, data_object_ptr, false); // Update vtbl pointer offset = data_object_ptr.ToInt64(); offset += Marshal.SizeOf(typeof(IntPtr)); Marshal.WriteIntPtr(data_object_ptr, new IntPtr(offset)); return data_object_ptr; }