private void TemplateProfileCallback(object sender, EventArgs e) { IVsMonitorSelection SelectionService; SelectionService = (IVsMonitorSelection)GetGlobalService(typeof(SVsShellMonitorSelection)); IntPtr ppHier; uint pitemid; IVsMultiItemSelect ppMIS; IntPtr ppSC; if (SelectionService.GetCurrentSelection(out ppHier, out pitemid, out ppMIS, out ppSC) == VSConstants.S_OK) { //! Handle single selections only for now. if (pitemid != VSConstants.VSITEMID_SELECTION && ppHier != null) { IVsHierarchy hierarchy = Marshal.GetTypedObjectForIUnknown(ppHier, typeof(IVsHierarchy)) as IVsHierarchy; object value; hierarchy.GetProperty(pitemid, (int)__VSHPROPID.VSHPROPID_Name, out value); object svalue; hierarchy.GetProperty(pitemid, (int)__VSHPROPID.VSHPROPID_ExtObject, out svalue); //! Get the filename. string filename = value.ToString(); EnvDTE.Project project = ProjectHelper.GetProject(hierarchy); if (isProfilingInstantiations == 0) { ClaimInstantiationState(); Options opts = GetOptions(); templateProfiler = new TemplateProfiler(project, filename, opts.StackMaxSize, GetProfileOutputPane(), this.FreeInstantiationState); } else { templateProfiler.Cancel(); } } } }