IVsProject2.GetItemContext 方法 (UInt32, IServiceProvider%)
返回项目的上下文。
命名空间: Microsoft.VisualStudio.Shell.Interop
程序集: Microsoft.VisualStudio.Shell.Interop(在 Microsoft.VisualStudio.Shell.Interop.dll 中)
语法
声明
Function GetItemContext ( _
itemid As UInteger, _
<OutAttribute> ByRef ppSP As IServiceProvider _
) As Integer
int GetItemContext(
uint itemid,
out IServiceProvider ppSP
)
参数
- itemid
类型:System.UInt32
[in] 值从 VSITEMIDDWORD执行上下文项的标识符。
- ppSP
类型:Microsoft.VisualStudio.OLE.Interop.IServiceProvider%
[out] 为 IServiceProvider 接口的指针。
返回值
类型:System.Int32
如果方法成功,则返回 S_OK。如果失败,它会返回一个错误代码。
备注
COM 签名
从 vsshell.idl:
HRESULT IVsProject2::GetItemContext(
[in] VSITEMID itemid,
[out] IServiceProvider **ppSP
);
此方法允许项目的文档编辑器提供项目上下文服务。 如果项目不需要为项提供了特殊服务,则应返回 nullnull 引用(在 Visual Basic 中为 Nothing)。 决不如果返回传递给该环境的包 SetSite的 IServiceProvider 指针。 全局服务将自动可编辑。
下面的示例提供在 GetItemContext 方法提供的项目上下文服务的更多详细信息。
示例
//---------------------------------------------------------------------
// interface: IServiceProvider
//---------------------------------------------------------------------
STDMETHODIMP CLangFileNode::QueryService(REFIID guidService, REFIID riid, void** ppv)
{
if (ppv == NULL)
return E_INVALIDARG;
*ppv = NULL;
HRESULT hr = E_NOINTERFACE;
if (IsEqualIID(guidService, SID_SVSMDCodeDomProvider))
{
CComPtr<IVSMDCodeDomCreator> srpCodeDomCreator;
hr = _VxModule.QueryService(SID_SVSMDDesignerService, IID_IVSMDCodeDomCreator, (LPVOID*) &srpCodeDomCreator);
if (SUCCEEDED(hr))
{
CComPtr<IVSMDCodeDomProvider> srpCodeDomProvider;
hr = srpCodeDomCreator->CreateCodeDomProvider(GetCVsHierarchy()->GetIVsHierarchy(),GetVsItemID(),&srpCodeDomProvider);
if (SUCCEEDED(hr))
hr = srpCodeDomProvider->QueryInterface(riid, ppv);
}
}
else if (IsEqualIID(guidService, VxDTE::SID_SVSProjectItem))
{
CComPtr<VxDTE::ProjectItem> srpProjectItem;
hr = GetDTEItem(&srpProjectItem);
if (SUCCEEDED(hr))
hr = srpProjectItem->QueryInterface(riid, ppv);
}
else if (IsEqualIID(guidService, SID_SVSWebReferenceDynamicProperties))
{
// We only support this service if our parent folder is a web reference folder
CLangFolderNode* pFolder = GetFolderParent();
if(pFolder && pFolder->IsWebReferenceFolder())
{
CComPtr<IVSWebReferenceDynamicProperties> srpWebRef;
hr = pFolder->GetIVsWebRefDynamicProperties(&srpWebRef);
if(SUCCEEDED(hr))
hr = srpWebRef->QueryInterface(riid, ppv);
}
}
else if (IsEqualIID(guidService, IID_IVsHierarchy))
{
// Access to our hierarchy.
hr = GetProject()->GetHierarchy()->QueryInterface(riid, ppv);
}
return hr;
}
.NET Framework 安全性
- 对直接调用方的完全信任。此成员不能由部分信任的代码使用。有关更多信息,请参见通过部分受信任的代码使用库。