winsafe\ole\com_interfaces/
idataobject.rs1#![allow(non_camel_case_types, non_snake_case)]
2
3use crate::co;
4use crate::decl::*;
5use crate::guard::*;
6use crate::kernel::privs::*;
7use crate::ole::{privs::*, vts::*};
8use crate::prelude::*;
9
10com_interface! { IDataObject: "0000010e-0000-0000-c000-000000000046";
11 }
18
19impl ole_IDataObject for IDataObject {}
20
21pub trait ole_IDataObject: ole_IUnknown {
30 fn DAdvise(
33 &self,
34 formatetc: &FORMATETC,
35 advf: co::ADVF,
36 adv_sink: &impl ole_IAdviseSink,
37 ) -> HrResult<u32> {
38 let mut connection = u32::default();
39 ok_to_hrresult(unsafe {
40 (vt::<IDataObjectVT>(self).DAdvise)(
41 self.ptr(),
42 pcvoid(formatetc),
43 advf.raw(),
44 adv_sink.ptr(),
45 &mut connection,
46 )
47 })
48 .map(|_| connection)
49 }
50
51 fn DUnadvise(&self, connection: u32) -> HrResult<()> {
54 ok_to_hrresult(unsafe { (vt::<IDataObjectVT>(self).DUnadvise)(self.ptr(), connection) })
55 }
56
57 unsafe fn GetData(&self, formatetc: &FORMATETC) -> HrResult<ReleaseStgMediumGuard> {
64 let mut sm = STGMEDIUM::default();
65 ok_to_hrresult((vt::<IDataObjectVT>(self).GetData)(
66 self.ptr(),
67 pcvoid(formatetc),
68 pvoid(&mut sm),
69 ))
70 .map(|_| ReleaseStgMediumGuard::new(sm))
71 }
72
73 fn QueryGetData(&self, formatetc: &FORMATETC) -> HrResult<()> {
76 ok_to_hrresult(unsafe {
77 (vt::<IDataObjectVT>(self).QueryGetData)(self.ptr(), pcvoid(formatetc))
78 })
79 }
80}