IDebugExpressionEvaluator2::SetCorPath
Note
This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
Sets the path to the common language runtime (CLR) loaded in the debugger.
Syntax
HRESULT SetCorPath(
LPCOLESTR pcstrCorPath
);
int SetCorPath(
string pcstrCorPath
);
Parameters
pcstrCorPath
[in] Path to the CLR loaded in the debugger.
Return Value
If successful, returns S_OK
; otherwise, returns an error code.
Example
The following example shows how to implement this method for a ExpressionEvaluatorPackage object that exposes the IDebugExpressionEvaluator2 interface.
STDMETHODIMP ExpressionEvaluatorPackage::SetCorPath(LPCOLESTR pcstrCorPath)
{
VerifyInPtr(pcstrCorPath);
HRESULT hr = E_FAIL;
VBEECompilerSingleton *pVBEECompilerSingleton = VBEECompilerSingleton::Instance();
if (pVBEECompilerSingleton)
{
pVBEECompilerSingleton->LockEECompiler();
try
{
if (!m_pCompiler->FindEECompilerHost(pcstrCorPath, &m_pCompilerHost))
{
CComObject<CVBEECompilerHost> *pEECompilerHost;
if (SUCCEEDED(CComObject<CVBEECompilerHost>::CreateInstance(&pEECompilerHost)))
{
pEECompilerHost->AddRef();
pEECompilerHost->Init(pcstrCorPath);
CComPtr<IVbCompilerHost> srpVBHost;
HRESULT hr2 = pEECompilerHost->QueryInterface(IID_IVbCompilerHost, (void **)&srpVBHost);
pEECompilerHost->Release();
if (SUCCEEDED(hr2))
{
m_pCompiler->RegisterEECompilerHost(srpVBHost);
}
}
}
else
{
hr = S_OK;
}
if (m_pCompiler->FindEECompilerHost(pcstrCorPath, &m_pCompilerHost))
{
ULONG cErrors = 0;
ULONG cWarnings = 0;
m_pCompiler->CompileToBound(m_pCompilerHost, &cErrors, &cWarnings, NULL);
// This needs to happen after bound
if (m_pCompilerHost->GetVbLibraryType() == TLB_AutoDetect)
{
m_pCompilerHost->AutoSetVbLibraryType();
}
VSASSERT(m_pCompiler && m_pCompilerHost && m_pCompilerHost->GetIntrinsicSymbol(t_i4) != NULL, "Invalid state");
if (cErrors + cWarnings > 0)
{
VSFAIL("Errors from mscorlib.dll and vb runtime!");
__leave;
}
hr = S_OK;
}
else
{
VSFAIL("FindCompilerHost shouldn't have failed!");
}
}
catch_hresult;
VSASSERT(m_pCompilerHost->GetComPlusProject()->GetCompState() >= CS_Bound, "Debugger mscorlib not in bound state");
pVBEECompilerSingleton->UnlockEECompiler();
}
return hr;
}