winsafe\mf\com_interfaces/
imfgetservice.rs

1#![allow(non_camel_case_types, non_snake_case)]
2
3use crate::co;
4use crate::decl::*;
5use crate::kernel::privs::*;
6use crate::mf::vts::*;
7use crate::ole::privs::*;
8use crate::prelude::*;
9
10com_interface! { IMFGetService: "fa993888-4383-415a-a930-dd472a8cf6f7";
11	/// [`IMFGetService`](https://learn.microsoft.com/en-us/windows/win32/api/mfidl/nn-mfidl-imfgetservice)
12	/// COM interface.
13	///
14	/// Automatically calls
15	/// [`IUnknown::Release`](https://learn.microsoft.com/en-us/windows/win32/api/unknwn/nf-unknwn-iunknown-release)
16	/// when the object goes out of scope.
17	///
18	/// # Examples
19	///
20	/// ```no_run
21	/// use winsafe::{self as w, prelude::*};
22	///
23	/// let vmr: w::IBaseFilter; // initialized somewhere
24	/// # let vmr = unsafe { w::IBaseFilter::null() };
25	///
26	/// let get_svc = vmr.QueryInterface::<w::IMFGetService>()?;
27	/// # w::HrResult::Ok(())
28	/// ```
29}
30
31impl mf_IMFGetService for IMFGetService {}
32
33/// This trait is enabled with the `mf` feature, and provides methods for
34/// [`IMFGetService`](crate::IMFGetService).
35///
36/// Prefer importing this trait through the prelude:
37///
38/// ```no_run
39/// use winsafe::prelude::*;
40/// ```
41pub trait mf_IMFGetService: ole_IUnknown {
42	/// [`IMFGetService::GetService`](https://learn.microsoft.com/en-us/windows/win32/api/mfidl/nf-mfidl-imfgetservice-getservice)
43	/// method.
44	///
45	/// # Examples
46	///
47	/// ```no_run
48	/// use winsafe::{self as w, prelude::*, co};
49	///
50	/// let get_svc: w::IMFGetService; // initialized somewhere
51	/// # let get_svc = unsafe { w::IMFGetService::null() };
52	///
53	/// let controller_evr = get_svc
54	///     .GetService::<w::IMFVideoDisplayControl>(
55	///         &co::MF_SERVICE::MR_VIDEO_RENDER_SERVICE,
56	///     )?;
57	/// # w::HrResult::Ok(())
58	/// ```
59	#[must_use]
60	fn GetService<T>(&self, service_id: &co::MF_SERVICE) -> HrResult<T>
61	where
62		T: ole_IUnknown,
63	{
64		let mut queried = unsafe { T::null() };
65		HrRet(unsafe {
66			(vt::<IMFGetServiceVT>(self).GetService)(
67				self.ptr(),
68				pcvoid(service_id),
69				pcvoid(&T::IID),
70				queried.as_mut(),
71			)
72		})
73		.to_hrresult()
74		.map(|_| queried)
75	}
76}