#![allow(non_camel_case_types, non_snake_case)]
use crate::co;
use crate::decl::*;
use crate::guard::*;
use crate::kernel::privs::*;
use crate::ole::{privs::*, vts::*};
use crate::prelude::*;
com_interface! { IDataObject: "0000010e-0000-0000-c000-000000000046";
}
impl ole_IDataObject for IDataObject {}
pub trait ole_IDataObject: ole_IUnknown {
fn DAdvise(
&self,
formatetc: &FORMATETC,
advf: co::ADVF,
adv_sink: &impl ole_IAdviseSink,
) -> HrResult<u32> {
let mut connection = 0u32;
HrRet(unsafe {
(vt::<IDataObjectVT>(self).DAdvise)(
self.ptr(),
pcvoid(formatetc),
advf.raw(),
adv_sink.ptr(),
&mut connection,
)
})
.to_hrresult()
.map(|_| connection)
}
fn DUnadvise(&self, connection: u32) -> HrResult<()> {
HrRet(unsafe { (vt::<IDataObjectVT>(self).DUnadvise)(self.ptr(), connection) })
.to_hrresult()
}
unsafe fn GetData(&self, formatetc: &FORMATETC) -> HrResult<ReleaseStgMediumGuard> {
let mut sm = STGMEDIUM::default();
HrRet(unsafe {
(vt::<IDataObjectVT>(self).GetData)(self.ptr(), pcvoid(formatetc), pvoid(&mut sm))
})
.to_hrresult()
.map(|_| unsafe { ReleaseStgMediumGuard::new(sm) })
}
fn QueryGetData(&self, formatetc: &FORMATETC) -> HrResult<()> {
HrRet(unsafe { (vt::<IDataObjectVT>(self).QueryGetData)(self.ptr(), pcvoid(formatetc)) })
.to_hrresult()
}
}