Click to See Complete Forum and Search --> : put_StartupProjects/get_StartupProjects..
honk
April 1st, 2003, 10:27 AM
I'm trying to figure out how to set the startupproject in the solution... essentially what I want to do is call "Project.SetasStartUpProject" but with an extra parameter that says what project I want to turn bold..
I was thinking maybe put_StartupProjects is the solution but can't get it to work properly....
Does anyone have any clues?...
Thanks.
regards,
Henrik, Senior Programmer
Digital Illusions CE, Sweden
AviLaviad
January 27th, 2005, 05:48 AM
i know this thread is 5 years ago but im giving it a shot - did u find an answer for this bcuz im also wondering how to do so.
thanks in advance,
Avi.
honk
January 27th, 2005, 06:01 AM
I remember I fixed it in some way... but it was a long time ago.. here is source code that takes care of it i think:
char startupProjectName[1024];
char configurationName[1024];
CComPtr<EnvDTE::_Solution> solution;
m_pDTE->get_Solution(&solution);
CComPtr<EnvDTE::SolutionBuild> solutionBuild = 0;
solution->get_SolutionBuild(&solutionBuild);
CComPtr<EnvDTE::Projects> projects;
solution->get_Projects(&projects);
long projectCount = 0;
projects->get_Count(&projectCount);
for(long projectIt=1; projectIt<=projectCount; ++projectIt) {
CComVariant projectIndex = projectIt;
CComPtr<EnvDTE::Project> project;
projects->Item(projectIndex, &project);
CComBSTR name;
project->get_Name(&name);
if(name == startupProjectName) {
CComBSTR string;
project->get_UniqueName(&string);
CComVariant var(string);
if(solutionBuild->put_StartupProjects(var) == S_OK) {
int i = 0;
}
break;
}
}
CComPtr<EnvDTE::SolutionConfigurations> solutionConfigurations = 0;
solutionBuild->get_SolutionConfigurations(&solutionConfigurations);
long configurationCount = 0;
solutionConfigurations->get_Count(&configurationCount);
for(long configurationIt=1; configurationIt<=configurationCount; ++configurationIt) {
CComVariant configurationIndex = configurationIt;
CComPtr<EnvDTE::SolutionConfiguration> solutionConfiguration = 0;
solutionConfigurations->Item(configurationIndex, &solutionConfiguration);
if(!solutionConfiguration)
continue;
CComBSTR name;
solutionConfiguration->get_Name(&name);
if(name == configurationName)
solutionConfiguration->Activate();
}
AviLaviad
January 27th, 2005, 06:07 AM
thanks man for ur answer i'll try to manage something out with this thing...
my problem is that i get from get_StartupProjects a VARIANT and i don't really know what todo with it...
thanks man,
Avi.
AviLaviad
January 27th, 2005, 07:45 AM
I remember I fixed it in some way... but it was a long time ago.. here is source code that takes care of it i think:
char startupProjectName[1024];
char configurationName[1024];
CComPtr<EnvDTE::_Solution> solution;
m_pDTE->get_Solution(&solution);
CComPtr<EnvDTE::SolutionBuild> solutionBuild = 0;
solution->get_SolutionBuild(&solutionBuild);
CComPtr<EnvDTE::Projects> projects;
solution->get_Projects(&projects);
long projectCount = 0;
projects->get_Count(&projectCount);
for(long projectIt=1; projectIt<=projectCount; ++projectIt) {
CComVariant projectIndex = projectIt;
CComPtr<EnvDTE::Project> project;
projects->Item(projectIndex, &project);
CComBSTR name;
project->get_Name(&name);
if(name == startupProjectName) {
CComBSTR string;
project->get_UniqueName(&string);
CComVariant var(string);
if(solutionBuild->put_StartupProjects(var) == S_OK) {
int i = 0;
}
break;
}
}
CComPtr<EnvDTE::SolutionConfigurations> solutionConfigurations = 0;
solutionBuild->get_SolutionConfigurations(&solutionConfigurations);
long configurationCount = 0;
solutionConfigurations->get_Count(&configurationCount);
for(long configurationIt=1; configurationIt<=configurationCount; ++configurationIt) {
CComVariant configurationIndex = configurationIt;
CComPtr<EnvDTE::SolutionConfiguration> solutionConfiguration = 0;
solutionConfigurations->Item(configurationIndex, &solutionConfiguration);
if(!solutionConfiguration)
continue;
CComBSTR name;
solutionConfiguration->get_Name(&name);
if(name == configurationName)
solutionConfiguration->Activate();
}
do u know what i need to do if i want to get_StartUpProjects?
the out parameter is VARIANT and i dont know how to use it. any clue?
Avi.
honk
January 27th, 2005, 08:37 AM
Sorry.. maybe looked at the wrong part in my code... look at this source and see if you find something
CComPtr<EnvDTE::_Solution> solution;
m_pDTE->get_Solution(&solution);
CComPtr<EnvDTE::SolutionBuild> solutionBuild = 0;
solution->get_SolutionBuild(&solutionBuild);
CComVariant variant;
if(solutionBuild->get_StartupProjects(&variant) != S_OK)
return;
if(variant.vt == VT_EMPTY)
return;
SAFEARRAY* array = variant.parray;
long ix = 0;
VARIANT var;
if(SafeArrayGetElement(array, &ix, &var) != S_OK)
return;
CW2CT startupProjectName(var.bstrVal);
char* ext = strstr(startupProjectName.m_psz, ".vcproj");
if(ext)
*ext = 0;
char* projectName = strrchr(startupProjectName.m_psz, '\\');
if(!projectName)
projectName = startupProjectName.m_psz;
else
++projectName;
CComPtr<EnvDTE::SolutionConfiguration> activeConfiguration = 0;
solutionBuild->get_ActiveConfiguration(&activeConfiguration);
CComBSTR temp;
activeConfiguration->get_Name(&temp);
CW2CT activeConfigurationName(temp);
AviLaviad
January 27th, 2005, 08:54 AM
thanks! it worked!!!
honk
January 27th, 2005, 09:05 AM
gratz ;-)
codeguru.com
Copyright WebMediaBrands Inc., All Rights Reserved.