自动查找某一目录下全部的*.dsw文件,对每一个找到的dsw文件,
调用一个不需用户干预,没有界面的VC编译器进行编译。如此反复
循环,直至全部的dsw文件都被自动编译完成,然后再将编译过程中
的相关信息反馈给用户我知道要plugin,但听说有现成的,是吗
如果作,有相关资料可以提供吗
谢谢了!!
调用一个不需用户干预,没有界面的VC编译器进行编译。如此反复
循环,直至全部的dsw文件都被自动编译完成,然后再将编译过程中
的相关信息反馈给用户我知道要plugin,但听说有现成的,是吗
如果作,有相关资料可以提供吗
谢谢了!!
{ CoInitializeEx(NULL, COINIT_MULTITHREADED);
CLSID clsid;
::CLSIDFromProgID(L"MSDEV.APPLICATION",&clsid);
char drive[4], dir[MAX_PATH], fname[MAX_PATH], ext[16], pszSearchPath[MAX_PATH]; IApplication *pApp=NULL;
IDispApplication app;
LPDISPATCH lpDispatch;
LPUNKNOWN pUnk;
int nStartCount = 0;
while(nStartCount<20 && ::GetActiveObject(clsid,NULL,&pUnk) != S_OK)
{
if(!app.CreateDispatch(clsid))
{
Output("Create Dispatch failed, retry...\r\n");
Sleep(1000);
nStartCount++;
continue;
}
} if(nStartCount<20)
{
VERIFY(pUnk->QueryInterface(IID_IDispatch,(void**)&lpDispatch) == S_OK);
app.AttachDispatch(lpDispatch);
pUnk->QueryInterface(&pApp);
pUnk->Release();
}
else
{
Output("failed, terminated.\r\n");
m_pLog->CloseConnection();
delete m_pLog;
m_pLog = NULL;
m_bRunning = 0;
return 0;
} // application is ok
#if USE_VC_EVENT
HANDLE hSem = CreateSemaphore(NULL, 0, 1, NULL);
IAppHelper *pAppHelper = GetAppHelper(); pAppHelper->SetApp((IUnknown *)&app);
pAppHelper->SetSemaphore(hSem);
#endif // USE_VC_EVENT app.EnableModeless(false);
app.SetWindowState(dsWindowStateMaximized);
lpDispatch = app.GetDocuments();
IDispDocuments lpDocuments ;
lpDocuments.AttachDispatch(lpDispatch); COleVariant docType("Auto");
COleVariant val((long)1);
val.ChangeType(VT_BOOL);
VARIANT configuration;
configuration.vt = VT_DISPATCH; // app.GetErrors();
CTime time0 = CTime::GetCurrentTime();
CString str = "开始编译(" + time0.Format("%Y-%m-%d %H:%M:%S") + ")...\r\n";
Output((LPCTSTR)str); StringArray *pProjList;
pProjList = pConfig->GetProjectList(); // build
CStringArray settingName;
if(pConfig->IsBuildDebug())
settingName.Add("Win32 Debug");
if(pConfig->IsBuildRelease())
settingName.Add("Win32 Release"); int i, nSize, nSetting, nSettingIndex;
nSetting = settingName.GetSize(); nSize = pProjList->GetSize();
int nStart = m_pcomboProjList->GetCurSel();
for(nSettingIndex=m_nBuildSettingIndex; nSettingIndex<nSetting; nSettingIndex++)
{
if(pConfig->m_bStopBuild)
{
bIncomplete = 1;
break;
} m_nBuildSettingIndex = nSettingIndex;
m_pcmbBuildSetting->SetCurSel(m_nBuildSettingIndex); Output("Configuration ------ ");
Output(settingName[nSettingIndex]);
Output(" ------\r\n");
for(i=nStart; i<nSize; i++)
{
// LPSTR lpszName="D:\\dev_buddy\\Complie\\Complie.dsw";// = m_projects[i].GetBuffer(m_projects[i].GetLength());
if(pConfig->m_bStopBuild)
{
bIncomplete = 1;
break;
}
str = pConfig->GetFullProj(i);
try{
_splitpath(str, drive, dir, fname, ext);
sprintf(pszSearchPath, "%s%s", drive, dir);
Output(str);
Output("\r\n");
lpDocuments.Open(
str,
docType,
val); // prepare a configuration
// IConfigurations *pIConfigurations;
// app.get_Configurations(&pIConfigurations);
IDispatch* lpActiveProj = NULL;
pApp->get_ActiveProject(&lpActiveProj);
IBuildProject *pActiveProj;
lpActiveProj->QueryInterface(&pActiveProj); IConfigurations *pConfigs;
pActiveProj->get_Configurations(&pConfigs); IConfiguration *pItem;
pItem = GetConfig(pConfigs, settingName[nSettingIndex]); if(pItem)
{
VARIANT config;
config.vt = VT_DISPATCH;
config.pdispVal = pItem;
if(i!=g_nNotCleanIndex && pConfig->IsRebuildAll())
app.RebuildAll(config);
else
app.Build(config);
long nErrs, nWarnings;
pApp->get_Errors(&nErrs);
pApp->get_Warnings(&nWarnings); CString strMsg;
// SDoc.dll - 4 error(s), 0 warning(s)
strMsg.Format("Build session ended - %d error(s), %d warning(s)\r\n\r\n",
nErrs, nWarnings);
Output(strMsg);
if(nErrs)
{
g_nNotCleanIndex = i;
if(pConfig->m_bBeep)
MessageBeep(-1);
if(pConfig->m_dwOnError==OE_STOP)
{
bIncomplete = 1;
goto l_end;
}
}
if(pItem)
pItem->Release();
}
else
{
Output("无法找到编译设置 ");
Output(settingName[nSettingIndex]);
Output("\r\n");
}
m_pcomboProjList->SetCurSel(i+1);
}
catch(...)
{
Output("Exception\r\n");
bIncomplete = 1;
}
} // for each workspace nStart = 0; m_pcomboProjList->SetCurSel(0);
} // for each setting
app.EnableModeless(true); if(!bIncomplete)
app.Quit();
app.DetachDispatch();
if(pApp)
pApp->Release();
::CoUninitialize(); CTime time1 = CTime::GetCurrentTime();
CTimeSpan span = time1-time0;
str = "编译结束(" + time1.Format("%Y-%m-%d %H:%M:%S") + ")总共耗时: "
+ span.Format("%H:%M:%S") + "\r\n\r\n";
Output((LPCTSTR)str); }
if(g_bInfinite)
{
m_pcomboProjList->SetCurSel(0);
goto l_restart;
} if(bIncomplete)
{
Outputln("没有完整编译,可能某些工程设置不正确,可能有 exception 。");
} if(!bIncomplete && pConfig->m_bOnAfterBuild)
{
Output("Run: ");
Outputln(pConfig->m_strAfterBuildCmd);
ShellExecute(g_hwndTop, "open", pConfig->m_strAfterBuildCmd,
NULL, NULL, SW_SHOWNORMAL);
} if(pConfig->IsShutdown())
{
CShutdownDlg dlg;
dlg.m_fDelay = pConfig->GetDelay();
dlg.DoModal();
} delete pConfig;
if(g_yacmdLine.bAutoRun)
::PostMessage(g_hwndTop, WM_QUIT, 0, 0); if(m_pLog)
{
m_pLog->CloseConnection();
m_pLog = NULL;
} m_bRunning = 0;
return 0;
提问题时标题要简明扼要地说明问题内容,切忌使用"急","求救"之类不能说明问题的标题
http://alphasun.betajin.com/ 遇到问题可以给我发消息,给我发信息时请附带原帖地址
DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析