Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//=--------------------------------------------------------------------------=
// HtmlHlp.Cpp
//=--------------------------------------------------------------------------=
// Copyright 1995 Microsoft Corporation. All Rights Reserved.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//=--------------------------------------------------------------------------=
//
// contains routines that we will find useful.
//
#include "pch.h"
#include "VsHelp.h"
SZTHISFILE
#ifdef VS_HELP
IVsHelpSystem *g_pIVsHelpSystem = NULL;
//=--------------------------------------------------------------------------=
// QueryStartupVisualStudioHelp [HtmlHelp helper]
//=--------------------------------------------------------------------------=
// Starts up Visual Studio help system
//
HRESULT QueryStartupVisualStudioHelp(IVsHelpSystem **ppIVsHelpSystem) { CHECK_POINTER(ppIVsHelpSystem); HRESULT hr = S_OK; IVsHelpInit *pIVSHelpInit = NULL;
ENTERCRITICALSECTION1(&g_CriticalSection);
// Check to see if we're already started. If so, no need to continue
//
if (g_pIVsHelpSystem) { goto CleanUp; }
// Create an instance of the VsHelpServices package, if not already created
//
hr = ::CoCreateInstance(CLSID_VsHelpServices, NULL, CLSCTX_INPROC_SERVER, IID_IVsHelpSystem, (void**) &g_pIVsHelpSystem) ;
if (FAILED(hr)) { goto CleanUp; }
ASSERT(g_pIVsHelpSystem, "g_pIVsHelpSystem is NULL even though hr was successful"); if (!g_pIVsHelpSystem) { hr = E_FAIL; goto CleanUp; }
//--- Initialize the help system.
// Get the init interface pointer.
//
hr = g_pIVsHelpSystem->QueryInterface(IID_IVsHelpInit, (void**)&pIVSHelpInit); ASSERT(SUCCEEDED(hr), "QI to IVSHelpInit failed -- continuing anyway"); if (SUCCEEDED(hr)) { hr = pIVSHelpInit->LoadUIResources(g_lcidLocale); ASSERT(SUCCEEDED(hr), "LoadUIResources() failed (this will happen if you haven't run MSDN setup) -- continuing anyway"); }
hr = S_OK;
CleanUp:
LEAVECRITICALSECTION1(&g_CriticalSection);
QUICK_RELEASE(pIVSHelpInit);
if (SUCCEEDED(hr)) { g_pIVsHelpSystem->AddRef(); *ppIVsHelpSystem = g_pIVsHelpSystem; }
return hr; }
//=--------------------------------------------------------------------------=
// VisualStudioShowHelpTopic [HtmlHelp helper]
//=--------------------------------------------------------------------------=
// Displays the help topic in Visual Studio's help window
//
HRESULT VisualStudioShowHelpTopic(const char *pszHelpFile, DWORD dwContextId, BOOL *pbHelpStarted) { HRESULT hr; IVsHelpSystem* pIVsHelpSystem = NULL; BSTR bstrHelpFile;
// Hand back help started to signify that we were able to start the help
// system. This is useful since the controls have no clue as to what
// environment they are running under Visual Studio might not be around
// in which case the control will call HtmlHelp directly.
//
if (pbHelpStarted) *pbHelpStarted = FALSE;
hr = QueryStartupVisualStudioHelp(&pIVsHelpSystem); if (FAILED(hr)) return hr;
ASSERT(pIVsHelpSystem, "QI succeeded but return value is NULL");
hr = pIVsHelpSystem->ActivateHelpSystem(0); ASSERT(SUCCEEDED(hr), "Failed to activate the help system"); if (FAILED(hr)) goto CleanUp; // With the help system successfully activated, signify to the caller
// that the Visual Studio help mechanism should work
//
if (pbHelpStarted) *pbHelpStarted = TRUE; bstrHelpFile = BSTRFROMANSI(pszHelpFile); ASSERT(bstrHelpFile, "Out of memory allocating BSTR");
hr = pIVsHelpSystem->DisplayTopicFromIdentifier(bstrHelpFile, dwContextId, VHS_Localize); SysFreeString(bstrHelpFile);
ASSERT(SUCCEEDED(hr), "Failed to display help topic"); if (FAILED(hr)) goto CleanUp;
CleanUp: QUICK_RELEASE(pIVsHelpSystem);
return hr; }
#endif // VS_HELP
|