.NET工程的自动化编译
来源:岁月联盟
编辑:zhu
时间:2006-04-07
VC7.1的代码如下:#pragma warning( disable : 4278 )//The following #import imports DTE based on its LIBID#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("7.0") lcid("0") raw_interfaces_only named_guids#pragma warning( default : 4278 )using namespace EnvDTE; // optional //…… void Ct3Dlg::OnBnClickedOk(){ CoInitialize(NULL); { _variant_t varRelease=L"Release"; _bstr_t bstrSlnPath=L"C://test//W3//W3.sln"; try { CComPtr<EnvDTE::_DTE> pZFIVE5_DTE; _Solution *pZFIVE5_S=NULL; SolutionBuild *pZFIVE5_SB=NULL; SolutionConfigurations *pZFIVE5_SCs=NULL; SolutionConfiguration *pZFIVE5_SC=NULL; pZFIVE5_DTE.CoCreateInstance(L"VisualStudio.DTE.7.1", 0); pZFIVE5_DTE->get_Solution(&pZFIVE5_S); if(pZFIVE5_S==NULL) { pZFIVE5_DTE->Quit(); goto ZFive5ComRet; } pZFIVE5_S->Open(bstrSlnPath); VARIANT_BOOL var; pZFIVE5_S->get_IsOpen(&var); if (var==VARIANT_TRUE) { pZFIVE5_S->get_SolutionBuild(&pZFIVE5_SB); if(pZFIVE5_SB==NULL) { pZFIVE5_S->Release(); pZFIVE5_S=NULL; pZFIVE5_DTE->Quit(); goto ZFive5ComRet; } pZFIVE5_SB->get_SolutionConfigurations(&pZFIVE5_SCs); if(pZFIVE5_SCs==NULL) { pZFIVE5_SB->Release(); pZFIVE5_SB=NULL; pZFIVE5_S->Release(); pZFIVE5_S=NULL; pZFIVE5_DTE->Quit(); goto ZFive5ComRet; } pZFIVE5_SCs->Item(varRelease,&pZFIVE5_SC); if(pZFIVE5_SC!=NULL) { pZFIVE5_SC->Activate(); pZFIVE5_SC->Release(); pZFIVE5_SC=NULL; } pZFIVE5_SCs->Release(); pZFIVE5_SCs=NULL; pZFIVE5_SB->Build(VARIANT_TRUE); pZFIVE5_SB->Release(); pZFIVE5_SB=NULL; pZFIVE5_S->Close(0); } else { AfxMessageBox("打开工程错误!"); } pZFIVE5_S->Release(); pZFIVE5_S=NULL; pZFIVE5_DTE->Quit(); } catch(...) { AfxMessageBox("接口调用错误!"); } } ZFive5ComRet: ::CoUninitialize(); return;} 写到这里不能不佩服ms的深谋远虑!!! 除非感到安全,否则人们就不能去迎接变化。----《最后期限》 的确是一句名言!!!