mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 12:23:31 +00:00
[STDUNK]
* Add library, implementing the CUnknown interface for WDM audio drivers svn path=/trunk/; revision=58641
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user