From 940f2f953fb4060ff21747cb0d579f618572283d Mon Sep 17 00:00:00 2001 From: Ryan Levick Date: Wed, 6 Nov 2019 17:43:36 +0100 Subject: [PATCH] In macros always refer to winapi through com::_winapi --- examples/aggregation/client/Cargo.toml | 3 -- examples/basic/client/Cargo.toml | 3 -- .../src/aggr_co_class/class_factory.rs | 15 +++++----- .../support/src/aggr_co_class/com_struct.rs | 3 +- .../src/aggr_co_class/com_struct_impl.rs | 14 ++++----- .../src/aggr_co_class/iunknown_impl.rs | 8 ++--- macros/support/src/co_class/class_factory.rs | 24 +++++++-------- macros/support/src/co_class/iunknown_impl.rs | 30 +++++++++---------- macros/support/src/utils/idents.rs | 2 +- macros/support/src/utils/mod.rs | 2 +- 10 files changed, 49 insertions(+), 55 deletions(-) diff --git a/examples/aggregation/client/Cargo.toml b/examples/aggregation/client/Cargo.toml index b3622a3e..af08b6cc 100644 --- a/examples/aggregation/client/Cargo.toml +++ b/examples/aggregation/client/Cargo.toml @@ -7,6 +7,3 @@ edition = "2018" [dependencies] com = { path = "../../.." } interface = { path = "../interface" } - -[target.'cfg(windows)'.dependencies] -winapi = { version = "0.3", features = ["winuser", "winreg", "combaseapi", "objbase"] } diff --git a/examples/basic/client/Cargo.toml b/examples/basic/client/Cargo.toml index b3622a3e..af08b6cc 100644 --- a/examples/basic/client/Cargo.toml +++ b/examples/basic/client/Cargo.toml @@ -7,6 +7,3 @@ edition = "2018" [dependencies] com = { path = "../../.." } interface = { path = "../interface" } - -[target.'cfg(windows)'.dependencies] -winapi = { version = "0.3", features = ["winuser", "winreg", "combaseapi", "objbase"] } diff --git a/macros/support/src/aggr_co_class/class_factory.rs b/macros/support/src/aggr_co_class/class_factory.rs index de7991d9..09c7a3ba 100644 --- a/macros/support/src/aggr_co_class/class_factory.rs +++ b/macros/support/src/aggr_co_class/class_factory.rs @@ -5,7 +5,8 @@ use syn::ItemStruct; // We manually generate a ClassFactory without macros, otherwise // it leads to an infinite loop. pub fn generate(struct_item: &ItemStruct) -> HelperTokenStream { - let base_interface_idents = crate::co_class::class_factory::get_class_factory_base_interface_idents(); + let base_interface_idents = + crate::co_class::class_factory::get_class_factory_base_interface_idents(); let aggr_map = crate::co_class::class_factory::get_class_factory_aggr_map(); let struct_ident = &struct_item.ident; @@ -31,19 +32,19 @@ pub fn generate(struct_item: &ItemStruct) -> HelperTokenStream { unsafe fn create_instance( &self, aggr: *mut *const ::VTable, - riid: winapi::shared::guiddef::REFIID, - ppv: *mut *mut winapi::ctypes::c_void, - ) -> winapi::shared::winerror::HRESULT { + riid: com::_winapi::shared::guiddef::REFIID, + ppv: *mut *mut com::_winapi::ctypes::c_void, + ) -> com::_winapi::shared::winerror::HRESULT { // Bringing trait into scope to access IUnknown methods. use com::interfaces::iunknown::IUnknown; let riid = unsafe { &*riid }; - if !aggr.is_null() && !winapi::shared::guiddef::IsEqualGUID(riid, &::IID) { + if !aggr.is_null() && !com::_winapi::shared::guiddef::IsEqualGUID(riid, &::IID) { unsafe { - *ppv = std::ptr::null_mut::(); + *ppv = std::ptr::null_mut::(); } - return winapi::shared::winerror::E_INVALIDARG; + return com::_winapi::shared::winerror::E_INVALIDARG; } let mut instance = #struct_ident::new(); diff --git a/macros/support/src/aggr_co_class/com_struct.rs b/macros/support/src/aggr_co_class/com_struct.rs index 6d928a51..4853ab51 100644 --- a/macros/support/src/aggr_co_class/com_struct.rs +++ b/macros/support/src/aggr_co_class/com_struct.rs @@ -21,8 +21,7 @@ pub fn generate( let aggregate_fields = co_class::com_struct::gen_aggregate_fields(aggr_map); // COM Fields for an aggregable coclass. - let non_delegating_iunknown_field_ident = - crate::utils::non_delegating_iunknown_field_ident(); + let non_delegating_iunknown_field_ident = crate::utils::non_delegating_iunknown_field_ident(); let iunknown_to_use_field_ident = crate::utils::iunknown_to_use_field_ident(); quote!( diff --git a/macros/support/src/aggr_co_class/com_struct_impl.rs b/macros/support/src/aggr_co_class/com_struct_impl.rs index f1c7617e..cb8836f3 100644 --- a/macros/support/src/aggr_co_class/com_struct_impl.rs +++ b/macros/support/src/aggr_co_class/com_struct_impl.rs @@ -136,15 +136,15 @@ fn gen_inner_query_interface( let aggr_match_arms = crate::co_class::iunknown_impl::gen_aggregate_match_arms(aggr_map); quote!( - pub(crate) fn inner_query_interface(&self, riid: *const winapi::shared::guiddef::IID, ppv: *mut *mut winapi::ctypes::c_void) -> HRESULT { + pub(crate) fn inner_query_interface(&self, riid: *const com::_winapi::shared::guiddef::IID, ppv: *mut *mut com::_winapi::ctypes::c_void) -> HRESULT { unsafe { let riid = &*riid; - if winapi::shared::guiddef::IsEqualGUID(riid, &com::interfaces::iunknown::IID_IUNKNOWN) { - *ppv = &self.#non_delegating_iunknown_field_ident as *const _ as *mut winapi::ctypes::c_void; + if com::_winapi::shared::guiddef::IsEqualGUID(riid, &com::interfaces::iunknown::IID_IUNKNOWN) { + *ppv = &self.#non_delegating_iunknown_field_ident as *const _ as *mut com::_winapi::ctypes::c_void; } #base_match_arms #aggr_match_arms else { - *ppv = std::ptr::null_mut::(); - return winapi::shared::winerror::E_NOINTERFACE; + *ppv = std::ptr::null_mut::(); + return com::_winapi::shared::winerror::E_NOINTERFACE; } self.inner_add_ref(); @@ -191,8 +191,8 @@ fn gen_allocate_fn( // Non-delegating methods. unsafe extern "stdcall" fn non_delegatingegating_query_interface( this: *mut *const ::VTable, - riid: *const winapi::shared::guiddef::IID, - ppv: *mut *mut winapi::ctypes::c_void, + riid: *const com::_winapi::shared::guiddef::IID, + ppv: *mut *mut com::_winapi::ctypes::c_void, ) -> HRESULT { let this = this.sub(#non_delegating_iunknown_offset) as *mut #struct_ident; (*this).inner_query_interface(riid, ppv) diff --git a/macros/support/src/aggr_co_class/iunknown_impl.rs b/macros/support/src/aggr_co_class/iunknown_impl.rs index a9a3293d..ae6affea 100644 --- a/macros/support/src/aggr_co_class/iunknown_impl.rs +++ b/macros/support/src/aggr_co_class/iunknown_impl.rs @@ -8,15 +8,15 @@ use syn::ItemStruct; pub fn generate(struct_item: &ItemStruct) -> HelperTokenStream { let struct_ident = &struct_item.ident; let iunknown_to_use_field_ident = crate::utils::iunknown_to_use_field_ident(); - let ptr_casting = quote! { as *mut winapi::ctypes::c_void }; + let ptr_casting = quote! { as *mut com::_winapi::ctypes::c_void }; quote!( impl com::interfaces::iunknown::IUnknown for #struct_ident { unsafe fn query_interface( &self, - riid: *const winapi::shared::guiddef::IID, - ppv: *mut *mut winapi::ctypes::c_void - ) -> winapi::shared::winerror::HRESULT { + riid: *const com::_winapi::shared::guiddef::IID, + ppv: *mut *mut com::_winapi::ctypes::c_void + ) -> com::_winapi::shared::winerror::HRESULT { let iunknown_to_use = com::InterfacePtr::::new(self.#iunknown_to_use_field_ident #ptr_casting); iunknown_to_use.query_interface(riid, ppv) } diff --git a/macros/support/src/co_class/class_factory.rs b/macros/support/src/co_class/class_factory.rs index 87a4c688..6c010a1b 100644 --- a/macros/support/src/co_class/class_factory.rs +++ b/macros/support/src/co_class/class_factory.rs @@ -39,14 +39,14 @@ pub fn generate(struct_item: &ItemStruct) -> HelperTokenStream { unsafe fn create_instance( &self, aggr: *mut *const ::VTable, - riid: winapi::shared::guiddef::REFIID, - ppv: *mut *mut winapi::ctypes::c_void, - ) -> winapi::shared::winerror::HRESULT { + riid: com::_winapi::shared::guiddef::REFIID, + ppv: *mut *mut com::_winapi::ctypes::c_void, + ) -> com::_winapi::shared::winerror::HRESULT { // Bringing trait into scope to access IUnknown methods. use com::interfaces::iunknown::IUnknown; if aggr != std::ptr::null_mut() { - return winapi::shared::winerror::CLASS_E_NOAGGREGATION; + return com::_winapi::shared::winerror::CLASS_E_NOAGGREGATION; } let mut instance = #struct_ident::new(); @@ -84,8 +84,8 @@ pub fn gen_class_factory_struct_definition(class_factory_ident: &Ident) -> Helpe pub fn gen_lock_server() -> HelperTokenStream { quote! { // TODO: Implement correctly - fn lock_server(&self, _increment: winapi::shared::minwindef::BOOL) -> winapi::shared::winerror::HRESULT { - winapi::shared::winerror::S_OK + fn lock_server(&self, _increment: com::_winapi::shared::minwindef::BOOL) -> com::_winapi::shared::winerror::HRESULT { + com::_winapi::shared::winerror::S_OK } } } @@ -143,18 +143,18 @@ fn gen_query_interface() -> HelperTokenStream { let vptr_field_ident = crate::utils::vptr_field_ident(&get_iclass_factory_interface_ident()); quote! { - unsafe fn query_interface(&self, riid: *const winapi::shared::guiddef::IID, ppv: *mut *mut winapi::ctypes::c_void) -> winapi::shared::winerror::HRESULT { + unsafe fn query_interface(&self, riid: *const com::_winapi::shared::guiddef::IID, ppv: *mut *mut com::_winapi::ctypes::c_void) -> com::_winapi::shared::winerror::HRESULT { // Bringing trait into scope to access add_ref method. use com::interfaces::iunknown::IUnknown; let riid = &*riid; - if winapi::shared::guiddef::IsEqualGUID(riid, &::IID) | winapi::shared::guiddef::IsEqualGUID(riid, &::IID) { - *ppv = &self.#vptr_field_ident as *const _ as *mut winapi::ctypes::c_void; + if com::_winapi::shared::guiddef::IsEqualGUID(riid, &::IID) | com::_winapi::shared::guiddef::IsEqualGUID(riid, &::IID) { + *ppv = &self.#vptr_field_ident as *const _ as *mut com::_winapi::ctypes::c_void; self.add_ref(); - winapi::shared::winerror::NOERROR + com::_winapi::shared::winerror::NOERROR } else { - *ppv = std::ptr::null_mut::(); - winapi::shared::winerror::E_NOINTERFACE + *ppv = std::ptr::null_mut::(); + com::_winapi::shared::winerror::E_NOINTERFACE } } } diff --git a/macros/support/src/co_class/iunknown_impl.rs b/macros/support/src/co_class/iunknown_impl.rs index 9697247a..5a1d1d11 100644 --- a/macros/support/src/co_class/iunknown_impl.rs +++ b/macros/support/src/co_class/iunknown_impl.rs @@ -91,7 +91,7 @@ fn gen_aggregate_drops(aggr_map: &HashMap>) -> HelperTokenStre let aggregate_drops = aggr_map.iter().map(|(aggr_field_ident, _)| { quote!( if !self.#aggr_field_ident.is_null() { - let mut aggr_interface_ptr = com::InterfacePtr::::new(self.#aggr_field_ident as *mut winapi::ctypes::c_void); + let mut aggr_interface_ptr = com::InterfacePtr::::new(self.#aggr_field_ident as *mut com::_winapi::ctypes::c_void); aggr_interface_ptr.release(); } ) @@ -154,20 +154,20 @@ pub fn gen_query_interface( quote!( unsafe fn query_interface( &self, - riid: *const winapi::shared::guiddef::IID, - ppv: *mut *mut winapi::ctypes::c_void - ) -> winapi::shared::winerror::HRESULT { + riid: *const com::_winapi::shared::guiddef::IID, + ppv: *mut *mut com::_winapi::ctypes::c_void + ) -> com::_winapi::shared::winerror::HRESULT { let riid = &*riid; - if winapi::shared::guiddef::IsEqualGUID(riid, &com::interfaces::iunknown::IID_IUNKNOWN) { - *ppv = &self.#first_vptr_field as *const _ as *mut winapi::ctypes::c_void; + if com::_winapi::shared::guiddef::IsEqualGUID(riid, &com::interfaces::iunknown::IID_IUNKNOWN) { + *ppv = &self.#first_vptr_field as *const _ as *mut com::_winapi::ctypes::c_void; } #base_match_arms #aggr_match_arms else { - *ppv = std::ptr::null_mut::(); - return winapi::shared::winerror::E_NOINTERFACE; + *ppv = std::ptr::null_mut::(); + return com::_winapi::shared::winerror::E_NOINTERFACE; } self.add_ref(); - NOERROR + com::_winapi::shared::winerror::NOERROR } ) } @@ -181,7 +181,7 @@ pub fn gen_base_match_arms(base_interface_idents: &[Ident]) -> HelperTokenStream quote!( else if #match_condition { - *ppv = &self.#vptr_field_ident as *const _ as *mut winapi::ctypes::c_void; + *ppv = &self.#vptr_field_ident as *const _ as *mut com::_winapi::ctypes::c_void; } ) }); @@ -204,15 +204,15 @@ pub fn gen_aggregate_match_arms(aggr_map: &HashMap>) -> Helper quote!( else if #first_aggr_match_condition #(#rem_aggr_match_conditions)* { if self.#aggr_field_ident.is_null() { - *ppv = std::ptr::null_mut::(); - return winapi::shared::winerror::E_NOINTERFACE; + *ppv = std::ptr::null_mut::(); + return com::_winapi::shared::winerror::E_NOINTERFACE; } - let mut aggr_interface_ptr = com::InterfacePtr::::new(self.#aggr_field_ident as *mut winapi::ctypes::c_void); + let mut aggr_interface_ptr = com::InterfacePtr::::new(self.#aggr_field_ident as *mut com::_winapi::ctypes::c_void); let hr = aggr_interface_ptr.query_interface(riid, ppv); if com::_winapi::shared::winerror::FAILED(hr) { - *ppv = std::ptr::null_mut::(); - return winapi::shared::winerror::E_NOINTERFACE; + *ppv = std::ptr::null_mut::(); + return com::_winapi::shared::winerror::E_NOINTERFACE; } // We release it as the previous call add_ref-ed the inner object. diff --git a/macros/support/src/utils/idents.rs b/macros/support/src/utils/idents.rs index d9e83f06..5a2f31fc 100644 --- a/macros/support/src/utils/idents.rs +++ b/macros/support/src/utils/idents.rs @@ -88,4 +88,4 @@ pub fn get_aggr_map(attr_args: &AttributeArgs) -> HashMap> { } aggr_map -} \ No newline at end of file +} diff --git a/macros/support/src/utils/mod.rs b/macros/support/src/utils/mod.rs index 415657ba..44275818 100644 --- a/macros/support/src/utils/mod.rs +++ b/macros/support/src/utils/mod.rs @@ -46,4 +46,4 @@ mod tests { assert_eq!(result, "ianimal_vtable".to_owned()); } use super::*; -} \ No newline at end of file +}