IDebugExpressionEvaluator2::SetCorPath
设置调试器中加载的公共语言运行时(CLR)的路径。
语法
参数
pcstrCorPath
[in]调试器中加载的 CLR 的路径。
返回值
如果成功,则返回 S_OK
;否则,返回错误代码。
示例
以下示例演示如何为公开 IDebugExpressionEvaluator2 接口的 ExpressionEvaluatorPackage 对象实现此方法。
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;
}