Exemple #1
0
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 );
   }
}
Exemple #2
0
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 );
}
Exemple #3
0
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 ) );
}
Exemple #4
0
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();
}