IVsProject.GetItemContext 方法

返回项目的上下文。

命名空间:  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执行上下文项的标识符。

返回值

类型:System.Int32
如果方法成功,则返回 S_OK。如果失败,它会返回一个错误代码。

备注

COM 签名

从 vsshell.idl:

HRESULT IVsProject::GetItemContext(
   [in] VSITEMID itemid,
   [out] IServiceProvider **ppSP
);

此方法允许项目的文档编辑器提供项目上下文服务。 如果项目不需要为项提供了特殊服务,则应返回 nullnull 引用(在 Visual Basic 中为 Nothing)。 决不如果返回传递给该环境的包 SetSiteIServiceProvider 指针。 全局服务将自动可编辑。

下面的示例提供在 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 安全性

请参见

参考

IVsProject 接口

Microsoft.VisualStudio.Shell.Interop 命名空间