// Copyright (c) Microsoft Corporation. All rights reserved. // // Visual Studio Packaging intefaces // // // // ******************************************************************* // // PDC/BETA1 Release Notes: Most interfaces in this file refered to by // the SDK documentation have been moved to vsshell.idl. // // ******************************************************************* // // Imports: // import "oleidl.idl"; import "vsshell.idl"; interface IVsEnumExposedObjects; interface IVsExposedObject; interface IVsProjectFilter; // The default encoding/decoding scheme for URLs in deployment and debugging. // The alternative to CP_UTF8 is CP_ACP. cpp_quote("#define CP_VSDPL CP_UTF8") // // The following are limits on the lengths of strings passed around in these // interfaces: // const unsigned long VS_MAX_PROJECT_CFG_CANONICAL_NAME = 255; cpp_quote("#define SBF_SUPPRESS_NOTEXISTS_QUERY SBF_SUPPRESS_NONE") [ uuid(d0b027ca-8c1f-11d0-8a34-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsExposedObjectProvider : IUnknown { HRESULT EnumExposedObjects([out] IVsEnumExposedObjects **ppIVsEnumExposedObject); HRESULT OpenExposedObject([in] LPCOLESTR szExposedObjectCanonicalName, [out] IVsExposedObject **ppIVsExposedObject); } // // The IVsExposedObjectProvider interface supports extended features of the IVsExposedObjectProvider // interface. The current extended feature provides summaries of the exposed objects that will be // provided upon enumeration. A summary can be gotten for each of the EOTYPEs specified below. For // each EOTYPE, a summary consisting of an unsigned long, with the low 16 bits being general flags // (represented by VS_EOSUMMARY_GENERAL_xxxxxxx), and the upper 16 bits being flags specific to the // EOTYPE. If the EOTYPE is present, the VS_EOSUMMARY_GENERAL_ISPRESENT bit is set. cpp_quote("#define VS_EOSUMMARY_GENERAL_OBJECT_PRESENT 0x00000001") [ uuid(2bc4e9c5-66b3-11d1-b194-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsExposedObjectProvider2 : IVsExposedObjectProvider { HRESULT get_ContentsSummary([in] REFGUID guidType, [out] ULONG *pdwSummary ); } [ uuid(d0b027bc-8c1f-11d0-8a34-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsEnumExposedObjects : IUnknown { HRESULT Reset(); HRESULT Next([in] ULONG cElements, [in, out, size_is(cElements)] IVsExposedObject *rgpIVsExposedObject[], [out] ULONG *pcElementsFetched); HRESULT Skip([in] ULONG cElements); HRESULT Clone([out] IVsEnumExposedObjects **ppIVsEnumExposedObjects); } cpp_quote("extern const __declspec(selectany) GUID GUID_VS_EOTYPE_COM_CLASS = { /* 707d11aa-91ca-11d0-8a3e-00a0c91e2acd */") cpp_quote(" 0x707d11aa,") cpp_quote(" 0x91ca,") cpp_quote(" 0x11d0,") cpp_quote(" {0x8a, 0x3e, 0x00, 0xa0, 0xc9, 0x1e, 0x2a, 0xcd}") cpp_quote(" };") cpp_quote("extern const __declspec(selectany) GUID GUID_VS_EOTYPE_MAIN_EXE = { /* 707d11b8-91ca-11d0-8a3e-00a0c91e2acd */") cpp_quote(" 0x707d11b8,") cpp_quote(" 0x91ca,") cpp_quote(" 0x11d0,") cpp_quote(" {0x8a, 0x3e, 0x00, 0xa0, 0xc9, 0x1e, 0x2a, 0xcd}") cpp_quote(" };") [ uuid(d0b027bd-8c1f-11d0-8a34-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsExposedObject : IUnknown { HRESULT get_Description([out] BSTR *pbstrDescription); HRESULT get_Type([out] GUID *pguidType); HRESULT get_HelpContext([out] DWORD *pdwHelpContext); HRESULT get_HelpFile([out] BSTR *pbstrHelpFile); } [ uuid(d0b027be-8c1f-11d0-8a34-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsExposedCOMServer : IVsExposedObject { HRESULT get_CLSID([out] CLSID *pclsid); } [ uuid(2bc4e9c6-66b3-11d1-b194-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsExposedCOMServer2 : IVsExposedCOMServer { HRESULT get_TypeLibId([out] CLSID *pclsid); HRESULT get_ProgId([out] BSTR *pbstrProgid); HRESULT get_Version([out] ULONG *pulVersion); } [ uuid(d0b027de-8c1f-11d0-8a34-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsExposedMainExe : IVsExposedObject { // "%0foo.exe /ThisSwitch /ThatSwitch" is the form of the result, where the %0 will // be replaced at a later date with the path in which the executable was placed. HRESULT get_CommandLine([out] BSTR *pbstrCommandLine); }; //----------------------------------------------------------------------------- // //----------------------------------------------------------------------------- [ uuid(d0b027cd-8c1f-11d0-8a34-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsPersistPropertyStream : IPersist { HRESULT InitNew(); HRESULT Load( [in] IVsPropertyStreamIn *pIVsPersistPropertyStreamIn, [in] IErrorLog *pIErrorLog); HRESULT Save( [in] IVsPropertyStreamOut *pIVsPersistPropertyStreamOut, [in] BOOL fClearDirty); } //----------------------------------------------------------------------------- // //----------------------------------------------------------------------------- // MattGe 2/2/2000: This service is OBSOLETE!!!!!!!!!!!! To be removed after // everyone's using SID_SVsSolutionDebuggingAssistant in dpkg.idl. cpp_quote("#define SID_SVsSolutionDebuggingAssistant IID_IVsSolutionDebuggingAssistant") [ uuid(910E8282-F867-11d0-AB36-00A0C90F2713), version(1.0), pointer_default(unique) ] interface IVsSolutionDebuggingAssistant : IUnknown { HRESULT MapDeployedURLToProjectItem( [in] LPCOLESTR pszDUrl, [out] IVsHierarchy **pphier, [out] VSITEMID *pitemid); HRESULT MapOutputToDeployedURL( [in] IVsProjectCfg *pProjectCfg, [in] LPCOLESTR pszOutputCanonicalName, [out] BSTR *pbstrDUrl); HRESULT MapProjectRelUrlToDeployedURL( [in] IVsProjectCfg *pProjectCfg, [in] LPCOLESTR pszProjectRelUrl, [out] BSTR *pbstrDUrl); } ///////////////////////////////////////////////////////////// // move to private idl //////////////////////////////////////////////////////////// // Note that IVsSolutionBuilder, IVsSyncSolutionBuilder, and IVsAsyncSolutionBuilder are // will be retired before the end of M3. Also, SID_SVsSolutionBuilder will no longer be // a service. The new way to get the "Solution Builder" will be // to QueryService(SID_SVsSolutionBuilder, IID_IVsSolutionBuildManager). cpp_quote("#define SID_SVsSolutionBuilder IID_IVsSolutionBuilder") [ uuid(d0b027ce-8c1f-11d0-8a34-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsSolutionBuilder : IUnknown { HRESULT AdviseBuildStatusCallback([in] IVsBuildStatusCallback *pIVsBuildStatusCallback, [out] VSCOOKIE *pdwCookie); HRESULT UnadviseBuildStatusCallback([in] VSCOOKIE dwCookie); HRESULT QueryBuilderStatus([out] BOOL *pfBuilderBusy ); } enum __VSSOLNBUILDERACTION { VSSBA_BUILD = 0, VSSBA_REBUILD = 1, VSSBA_CLEAN = 2, VSSBA_DEPLOY = 3, }; typedef DWORD VSSOLNBUILDERACTION; /////////////////////////////////////////////////////////////////////////////// // remove everything below ////////////////////////////////////////////////////////////////////////////// // // The IVsGroupSelectionDialog interface is used to request the // group selection dialog to be displayed. [ uuid(2B3B3A2D-4E79-11d3-9477-00C04F683646), version(1.0), pointer_default(unique) ] interface IVsGroupSelectionDialog : IUnknown { HRESULT DoModal( [in] BOOL fMultipleSelectionEnabled, [in] IVsProjectFilter *pIVsProjectFilter, [out] VARIANT *pvGroupCanonicalNames, [out] BSTR *pbstrProjectGuid, [out] BSTR *pbstrConfigurationCanonicalName, [out] BOOL *pfCancelled); } cpp_quote("#define SID_SVsGroupSelectionDialog IID_IVsGroupSelectionDialog") // // Implement IVsProjectFilter if you want to control the projects // which are and are not displayed in the project selection dialog. // Almost everyone does want to implement it. // [ uuid(d0b027d5-8c1f-11d0-8a34-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsProjectFilter : IUnknown { HRESULT DoFilter( [in] ULONG cproj, [in, size_is(cproj)] IVsHierarchy *rgpIVsHierarchy[], [in, out, size_is(cproj)] BOOL rgfAllowProject[]); } // // The IVsPropertyInterfaceBroker interface is used in cases where // a "loose aggregation" model of operation is desired with respect // to objects which share responsibility for a set of property // pages. Essentially, from a property page point of view, when the // property page wants to get the interface to the object holding // the properties it wants to modify, it should first QI the object // for the desired interface. If that QI fails, it should QI for // IVsPropertyInterfaceBroker, and then call // IVsPropertyInterfaceBroker::QueryPropertyInterface() for the property // interface that the property page requires. // // If E_NOINTERFACE is returned from the QueryPropertyInterface() call, it // should be returned from the IPropertyPage::SetObjects() method. // // Implementations of IVsPropertyInterfaceBroker presumably know about a // list of one or more potential property holding objects which the // property page wants to use. The first step is to QI each of the // objects on the list for the IID passed in riid. If none of those // objects support the interface, then the broker object must QI its // subobjects for IVsPropertyInterfaceBroker and if the subobject is itself // a property object broker, call the subobject's QueryPropertyInterface() // passing the same riid and ppvObject. // [ uuid(d0b027d8-8c1f-11d0-8a34-00a0c91e2acd), version(1.0), pointer_default(unique) ] interface IVsPropertyInterfaceBroker : IUnknown { HRESULT QueryPropertyInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject); }