mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 04:37:15 +00:00
[STDUNK]
* Add library, implementing the CUnknown interface for WDM audio drivers svn path=/trunk/; revision=58641
This commit is contained in:
parent
db3760f772
commit
a08dba228c
3 changed files with 83 additions and 0 deletions
|
@ -5,4 +5,5 @@ add_subdirectory(mment4)
|
|||
add_subdirectory(mmixer)
|
||||
add_subdirectory(shared)
|
||||
#add_subdirectory(soundblaster) Nothing links to this lib.
|
||||
add_subdirectory(stdunk)
|
||||
add_subdirectory(uartmidi)
|
||||
|
|
10
reactos/lib/drivers/sound/stdunk/CMakeLists.txt
Normal file
10
reactos/lib/drivers/sound/stdunk/CMakeLists.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
|
||||
set_cpp()
|
||||
|
||||
add_library(stdunk STATIC cunknown.cpp)
|
||||
|
||||
if(MSVC)
|
||||
add_target_compile_flags(stdunk "/GR-")
|
||||
else()
|
||||
add_target_compile_flags(stdunk "-fno-exceptions -fno-rtti")
|
||||
endif()
|
72
reactos/lib/drivers/sound/stdunk/cunknown.cpp
Normal file
72
reactos/lib/drivers/sound/stdunk/cunknown.cpp
Normal file
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
ReactOS Kernel-Mode COM
|
||||
IUnknown implementations
|
||||
|
||||
LICENSE
|
||||
Please see COPYING in the top-level directory for license information.
|
||||
|
||||
AUTHORS
|
||||
Andrew Greenwood
|
||||
*/
|
||||
|
||||
#include <stdunk.h>
|
||||
|
||||
CUnknown::CUnknown(PUNKNOWN outer_unknown)
|
||||
{
|
||||
m_ref_count = 0;
|
||||
|
||||
if ( outer_unknown )
|
||||
m_outer_unknown = outer_unknown;
|
||||
else
|
||||
m_outer_unknown = PUNKNOWN(dynamic_cast<PNONDELEGATINGUNKNOWN>(this));
|
||||
}
|
||||
|
||||
CUnknown::~CUnknown()
|
||||
{
|
||||
}
|
||||
|
||||
STDMETHODIMP_(ULONG)
|
||||
CUnknown::NonDelegatingAddRef()
|
||||
{
|
||||
InterlockedIncrement(&m_ref_count);
|
||||
return m_ref_count;
|
||||
}
|
||||
|
||||
STDMETHODIMP_(ULONG)
|
||||
CUnknown::NonDelegatingRelease()
|
||||
{
|
||||
if ( InterlockedDecrement(&m_ref_count) == 0 )
|
||||
{
|
||||
m_ref_count ++;
|
||||
delete this;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return m_ref_count;
|
||||
}
|
||||
|
||||
STDMETHODIMP_(NTSTATUS)
|
||||
CUnknown::NonDelegatingQueryInterface(
|
||||
IN REFIID iid,
|
||||
PVOID* ppVoid)
|
||||
{
|
||||
/* FIXME */
|
||||
#if 0
|
||||
if ( IsEqualGUID(iid, IID_IUnknown) ) /* TODO: Aligned? */
|
||||
*ppVoid = PVOID(PUNKNOWN(this));
|
||||
else
|
||||
*ppVoid = NULL;
|
||||
#endif
|
||||
|
||||
if ( *ppVoid )
|
||||
{
|
||||
PUNKNOWN(*ppVoid)->AddRef();
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
#if __GNUC__
|
||||
extern "C" void __cxa_pure_virtual() { ASSERT(FALSE); }
|
||||
#endif
|
Loading…
Reference in a new issue