⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comcsup.h

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 H
字号:
#ifndef __COMCSUP_H
#define __COMCSUP_H

/*
 ******************************************************************************
 * This header is for easier generation of IUnknown interfaces for inherited  *
 * classes and for casts from the interface to the implementation and vice    *
 * versa.                                                                     *
 ******************************************************************************
 */

/* Generates a Iiface::AddRef() method that forwards to Iimpl::AddRef() */
#define METHOD_IUNKNOWN_INHERITED_ADDREF_NAME(iface,impl) impl##Impl_##iface##_AddRef
#define METHOD_IUNKNOWN_INHERITED_ADDREF(iface,impl) \
static ULONG STDMETHODCALLTYPE \
impl##Impl_##iface##_AddRef(IN OUT iface *ifc) { \
    impl##Impl *This = impl##Impl_from_##iface (ifc); \
    impl *baseiface = impl##_from_##impl##Impl(This); \
    return impl##Impl_AddRef(baseiface); \
}

/* Generates a Iiface::Release() method that forwards to Iimpl::Release() */
#define METHOD_IUNKNOWN_INHERITED_RELEASE_NAME(iface,impl) impl##Impl_##iface##_Release
#define METHOD_IUNKNOWN_INHERITED_RELEASE(iface,impl) \
static ULONG STDMETHODCALLTYPE \
impl##Impl_##iface##_Release(IN OUT iface *ifc) { \
    impl##Impl *This = impl##Impl_from_##iface (ifc); \
    impl *baseiface = impl##_from_##impl##Impl(This); \
    return impl##Impl_AddRef(baseiface); \
}

/* Generates a Iiface::QueryInterface() method that forwards to Iimpl::QueryInterface() */
#define METHOD_IUNKNOWN_INHERITED_QUERYINTERFACE_NAME(iface,impl) impl##Impl_##iface##_QueryInterface
#define METHOD_IUNKNOWN_INHERITED_QUERYINTERFACE(iface,impl) \
static HRESULT STDMETHODCALLTYPE \
impl##Impl_##iface##_QueryInterface(IN OUT iface *ifc, IN REFIID riid, OUT VOID **ppvObject) { \
    impl##Impl *This = impl##Impl_from_##iface (ifc); \
    impl *baseiface = impl##_from_##impl##Impl(This); \
    return impl##Impl_QueryInterface(baseiface, riid, ppvObject); \
}

/* Generates a Ixxx_from_IxxxImpl() and a IxxxImpl_from_Ixxx() inline function */
#define IMPL_CASTS(iface,impl,vtbl) \
static __inline iface * \
iface##_from_##impl##Impl (impl##Impl *This) { \
    return (iface *)&This->vtbl; \
} \
static __inline impl##Impl * \
impl##Impl_from_##iface (iface *ifc) { \
    return (impl##Impl *)((ULONG_PTR)ifc - FIELD_OFFSET(impl##Impl, vtbl)); \
}

#endif /* __COMCSUP_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -