Ai
1 Star 2 Fork 0

eaglexmw/TstConn

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
BindHost.Cpp 3.77 KB
一键复制 编辑 原始数据 按行查看 历史
YCKJ2082 提交于 2020-05-12 10:41 +08:00 . first commit
// File: BindHost.Cpp
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Classes Reference and related electronic
// documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft C++ Libraries products.
#include "StdAfx.H"
#include "TestCon.H"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CTCBindHost::CTCBindHost() :
m_nRefCount( 0 )
{
}
CTCBindHost::~CTCBindHost()
{
}
HRESULT CTCBindHost::CreateInstance( REFIID iid, void** ppObject )
{
CTCBindHost* pObject;
HRESULT hResult;
if( ppObject == NULL )
{
return( E_POINTER );
}
*ppObject = NULL;
#pragma warning(push)
#pragma warning(disable: 6014)
/* prefast noise VSW 489981 */
pObject = new CTCBindHost;
hResult = pObject->QueryInterface( iid, ppObject );
if( FAILED( hResult ) )
{
delete pObject;
return( hResult );
}
ASSERT( *ppObject != NULL );
return( S_OK );
#pragma warning(pop)
}
///////////////////////////////////////////////////////////////////////////////
// IUnknown
///////////////////////////////////////////////////////////////////////////////
STDMETHODIMP_( ULONG ) CTCBindHost::AddRef()
{
m_nRefCount++;
return( m_nRefCount );
}
STDMETHODIMP_( ULONG ) CTCBindHost::Release()
{
m_nRefCount--;
if( m_nRefCount == 0 )
{
delete this;
return( 0 );
}
return( m_nRefCount );
}
STDMETHODIMP CTCBindHost::QueryInterface( REFIID iid, void** ppInterface )
{
if( ppInterface == NULL )
{
return( E_POINTER );
}
*ppInterface = NULL;
if( IsEqualIID( iid, IID_IUnknown ) || IsEqualIID( iid, IID_IBindHost ) )
{
*ppInterface = (IBindHost*)this;
AddRef();
return( S_OK );
}
return( E_NOINTERFACE );
}
///////////////////////////////////////////////////////////////////////////////
// IBindHost
///////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CTCBindHost::CreateMoniker( LPOLESTR pszName, IBindCtx* pBindCtx,
IMoniker** ppMoniker, DWORD dwReserved )
{
HRESULT hResult;
(void)pBindCtx;
(void)dwReserved;
if( ppMoniker == NULL )
{
return( E_POINTER );
}
*ppMoniker = NULL;
if( pszName == NULL )
{
return( E_INVALIDARG );
}
hResult = CreateURLMoniker( NULL, pszName, ppMoniker );
if( FAILED( hResult ) )
{
return( hResult );
}
ASSERT( *ppMoniker != NULL );
return( S_OK );
}
STDMETHODIMP CTCBindHost::MonikerBindToObject( IMoniker* pMoniker,
IBindCtx* pBindCtx, IBindStatusCallback* pBSC, REFIID iid, void** ppObject )
{
(void)pMoniker;
(void)pBindCtx;
(void)pBSC;
(void)iid;
if( ppObject == NULL )
{
return( E_POINTER );
}
*ppObject = NULL;
return( E_NOTIMPL );
}
STDMETHODIMP CTCBindHost::MonikerBindToStorage( IMoniker* pMoniker,
IBindCtx* pBindCtx, IBindStatusCallback* pBSC, REFIID iid, void** ppObject )
{
HRESULT hResult;
IBindCtxPtr pNewBindCtx;
TCTrace( TRACELEVEL_NORMAL, "IBindHost::MonikerBindToStorage\n" );
if( ppObject == NULL )
{
return( E_POINTER );
}
*ppObject = NULL;
if( pBindCtx != NULL )
{
pNewBindCtx = pBindCtx;
if( pBSC )
{
hResult = RegisterBindStatusCallback( pBindCtx, pBSC, NULL, 0 );
if( FAILED( hResult ) )
{
return( hResult );
}
}
}
else
{
if( pBSC )
{
hResult = CreateAsyncBindCtx( 0, pBSC, NULL, &pNewBindCtx );
if( FAILED( hResult ) )
{
return( hResult );
}
}
else
{
hResult = CreateBindCtx( 0, &pNewBindCtx );
if( FAILED( hResult ) )
{
return( hResult );
}
}
}
ASSERT( pNewBindCtx != NULL );
return( pMoniker->BindToStorage( pNewBindCtx, NULL, iid, ppObject ) );
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/eaglexmw/TstConn.git
git@gitee.com:eaglexmw/TstConn.git
eaglexmw
TstConn
TstConn
master

搜索帮助