mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 12:40:33 +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(mmixer)
|
||||||
add_subdirectory(shared)
|
add_subdirectory(shared)
|
||||||
#add_subdirectory(soundblaster) Nothing links to this lib.
|
#add_subdirectory(soundblaster) Nothing links to this lib.
|
||||||
|
add_subdirectory(stdunk)
|
||||||
add_subdirectory(uartmidi)
|
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