星期六去了一趟海龙,内存终于升g了,下午回来看了一会儿.net的msdn帮助,发现
dte,觉得对大团队自动化编译很有利用价值了,就想写点东西出来!
通过这个接口很容易实现vc7的工程编译自动化,什么也不说了, 一切尽在代码中!
msdn中描述dte结构的示意图如下:
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;
}
pzive5_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的深谋远虑!!!
除非感到安全,否则人们就不能去迎接变化。
----《最后期限》
的确是一句名言!!!
新闻热点
疑难解答
图片精选