static void RegisterServer( LPCTSTR pszPathName ) { HINSTANCE hLibrary; PDLLREGISTERSERVER pDllRegisterServer; HRESULT hResult; TCTrace( TRACELEVEL_NORMAL, "Registering %s\n", pszPathName ); hLibrary = LoadLibrary( pszPathName ); if( hLibrary == NULL ) { TCTrace( TRACELEVEL_NORMAL, "Failed to load library %s.\n", pszPathName ); } else { pDllRegisterServer = PDLLREGISTERSERVER( GetProcAddress( hLibrary, _T( "DllRegisterServer" ) ) ); if( pDllRegisterServer == NULL ) { TCTrace( TRACELEVEL_NORMAL, "Failed to get address of DllRegisterServer.\n" ); } else { hResult = pDllRegisterServer(); if( FAILED( hResult ) ) { TCTrace( TRACELEVEL_NORMAL, "DllRegisterServer failed hResult = 0x%x.\n", hResult ); } } FreeLibrary( hLibrary ); } }
HRESULT CExtendedControl::Init( REFCLSID clsidControl, CTestContainer98Item* pItem ) { HRESULT hResult; ITypeLibPtr pTypeLib; LPOLESTR pszModuleO; TCHAR szModule[MAX_PATH]; CString strTLBPath; ASSERT( m_pItem != NULL ); ASSERT( m_pControl == NULL ); hResult = CoCreateInstance( clsidControl, (IUnknown*)this, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, IID_IUnknown, (void**)&m_pControl ); if( FAILED( hResult ) ) { return( hResult ); } m_pInnerDispatch = m_pControl; if( m_pInnerDispatch == NULL ) { return( E_NOINTERFACE ); } Release(); // Artificially release because we QI'd the aggregate. GetModuleFileName( NULL, szModule, MAX_PATH ); strTLBPath = szModule; strTLBPath += _T( "\\2" ); // Load the second TLB from the executable pszModuleO = strTLBPath.AllocSysString(); hResult = LoadTypeLib( pszModuleO, &pTypeLib ); if( FAILED( hResult ) ) { TCTrace( TRACELEVEL_NORMAL, "Failed to load typelib for extended control\n" ); return( hResult ); } hResult = pTypeLib->GetTypeInfoOfGuid( __uuidof( ITCExtendedControl ), &m_pTypeInfo ); if( FAILED( hResult ) ) { return( hResult ); } m_pItem = pItem; m_pView = m_pItem->GetDocument()->GetView(); return( S_OK ); }
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 ) ); }
void CRegisterControlsDlg::OnUnregister() { CWaitCursor wait; UINT nSelectedItems; int iItem; CString strPath; HINSTANCE hLibrary; PDLLUNREGISTERSERVER pDllUnregisterServer; HRESULT hResult; int nResult; iItem = -1; nSelectedItems = m_lvRegisteredControls.GetSelectedCount(); while( nSelectedItems > 0 ) { iItem = m_lvRegisteredControls.GetNextItem( iItem, LVNI_SELECTED ); ASSERT( iItem != -1 ); strPath = m_lvRegisteredControls.GetItemText( iItem, 1 ); TCTrace( TRACELEVEL_NORMAL, "Unregistering %s\n", LPCTSTR( strPath ) ); hResult = S_OK; hLibrary = LoadLibrary( strPath ); if( hLibrary == NULL ) { TCTrace( TRACELEVEL_NORMAL, "Failed to load library %s.\n", LPCTSTR( strPath ) ); hResult = E_FAIL; } else { pDllUnregisterServer = PDLLUNREGISTERSERVER( GetProcAddress( hLibrary, _T( "DllUnregisterServer" ) ) ); if( pDllUnregisterServer == NULL ) { TCTrace( TRACELEVEL_NORMAL, "Failed to get address of DllUnregisterServer.\n" ); hResult = E_FAIL; } else { hResult = pDllUnregisterServer(); if( FAILED( hResult ) ) { TCTrace( TRACELEVEL_NORMAL, "DllUnregisterServer failed hResult = 0x%x.\n", hResult ); } } FreeLibrary( hLibrary ); } if( FAILED( hResult ) ) { nResult = AfxMessageBox( IDS_UNREGISTERSERVERFAILED, MB_YESNO ); if( nResult == IDYES ) { } } nSelectedItems--; } RefreshRegisteredControls(); }