?? drv_wizardaw.cpp
字號:
// Drv_Wizardaw.cpp : implementation file
//
#include "stdafx.h"
#include "Drv_Wizard.h"
#include "Drv_Wizardaw.h"
#ifdef _PSEUDO_DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// This is called immediately after the custom AppWizard is loaded. Initialize
// the state of the custom AppWizard here.
void CDrv_WizardAppWiz::InitCustomAppWiz()
{
// There are no steps in this custom AppWizard.
SetNumberOfSteps(0);
// TODO: Add any other custom AppWizard-wide initialization here.
}
// This is called just before the custom AppWizard is unloaded.
void CDrv_WizardAppWiz::ExitCustomAppWiz()
{
// TODO: Add code here to deallocate resources used by the custom AppWizard
}
// This is called when the user clicks "Create..." on the New Project dialog
// or "Next" on one of the custom AppWizard's steps.
CAppWizStepDlg* CDrv_WizardAppWiz::Next(CAppWizStepDlg* pDlg)
{
return NULL;
}
void CDrv_WizardAppWiz::CustomizeProject(IBuildProject* pProject)
{
// TODO: Add code here to customize the project. If you don't wish
// to customize project, you may remove this virtual override.
// This is called immediately after the default Debug and Release
// configurations have been created for each platform. You may customize
// existing configurations on this project by using the methods
// of IBuildProject and IConfiguration such as AddToolSettings,
// RemoveToolSettings, and AddCustomBuildStep. These are documented in
// the Developer Studio object model documentation.
// WARNING!! IBuildProject and all interfaces you can get from it are OLE
// COM interfaces. You must be careful to release all new interfaces
// you acquire. In accordance with the standard rules of COM, you must
// NOT release pProject, unless you explicitly AddRef it, since pProject
// is passed as an "in" parameter to this function. See the documentation
// on CCustomAppWiz::CustomizeProject for more information.
CString strProjName = TEXT("testDRV");
IConfigurations * pAllConf = 0;
BSTR bstrProjName = strProjName.AllocSysString();
pProject->get_Configurations(&pAllConf);
pProject->get_Name(&bstrProjName);
strProjName = bstrProjName;
if( pAllConf != 0 )
{
COleVariant var(0L,VT_ERROR);
var.scode=DISP_E_PARAMNOTFOUND;
CString strToolCl = TEXT("cl.exe");
CString strToolLink = TEXT("link.exe");
CString strToolMFC = TEXT("mfc");
CString strToolRes = TEXT("rc.exe");
CString strWindows = TEXT("/subsystem:windows");
CString strNative = TEXT("/subsystem:native");
// __stdcall
CString strCallConv = TEXT("/Gz");
// Enable C++ Exception handling should be removed
CString strEH = TEXT("/GX");
// not using MFC
CString strNoMFC = TEXT("0");
// pack structs on 8-byte boundary is the DEFAULT setting
CString strStructAlign = TEXT("/Zp8");
// in my option, the /GZ preprocessor shouldn't be removed
// but i have to.
CString strRelease = TEXT("/GZ");
CString strIncrement = TEXT("/incremental:no");
// get ddk dir
char ddkDir[256] = "\0";
GetEnvironmentVariable(
TEXT("BASEDIR"), // address of environment variable name
LPTSTR(ddkDir), // address of buffer for variable value
256// size of buffer, in characters
);
CString strPreprocessor = TEXT("/D _X86_=1 "
"/D i386=1 "
"/D STD_CALL=1 "
"/D CONDITION_HANDLING=1 "
"/D WIN32LEAN_AND_MEAN=1 "
"/D NT_UP=1 "
"/D NT_INST=0 "
"/D WIN32=100 "
"/D _NT1X_=100 "
"/D WINNT=100 "
"/D _WIN32_WINNT=0x0400 "
"/D DEVL=1 /D \"NDEBUG\" "
"/D _DLL=1 "
"/D \"_IDWBUILD\" "
"/D \"DBCS\" /D \"PRC\" "
"/D \"KKBUGFIX\" "
"/D \"DBCS_VERT\" "
"/D \"FESB\" ");
CString tmp;
tmp.Format("/I \"%s\\inc\"", ddkDir);
strPreprocessor += tmp;
CString strDbgInfo = TEXT("/debug");
CString strDftLib = TEXT("kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib");
CString strNoDftLib = TEXT("/nodefaultlib");
CString strDDKLib = TEXT("int64.lib ntoskrnl.lib hal.lib");
CString strNoPdb = TEXT("/pdb:none");
CString strEntry = TEXT("/entry:\"DriverEntry@8\" /dll");
CString strResources= TEXT("/d _X86_=1 "
"/d i386=1 "
"/d \"STD_CALL\" "
"/d CONDITION_HANDLING=1 "
"/d WIN32LEAN_AND_MEAN=1 "
"/d NT_UP=1 "
"/d NT_INST=0 "
"/d WIN32=100 "
"/d _NT1X_=100 "
"/d WINNT=1 "
"/d _WIN32_WINNT=0x0400 "
"/d DEVL=1 "
"/d \"NDEBUG\" "
"/d _DLL=1 "
"/d \"_IDWBUILD\" "
"/d \"DBCS\" /D \"PRC\" "
"/d \"KKBUGFIX\" "
"/d \"DBCS_VERT\" "
"/d \"FESB\"");
tmp.Format("/i \"%s\\inc\"", ddkDir);
strResources += tmp;
CString strDbgC7Compatible = TEXT("/Z7");
CString strDbgPreprocessor = TEXT("/D DBG=1 /D FPO=0 "
"/D \"RDRDBG\" "
"/D \"SRVDBG\" ");
CString strDbgRes = TEXT("/d DBG=1 /d FPO=0 "
"/d \"RDRDBG\" "
"/d \"SRVDBG\"");
CString strDbgOptions = TEXT("/GF /QIfdiv- /QIf");
tmp.Format("/out:\"debug/%s.sys\"", strProjName);
CString strDbgOutput = tmp;
tmp.Format("/libpath:\"%s\\lib\\i386\\checked\"", ddkDir);
CString strDbgLibPath = tmp;
CString strRlsPreprocessor = TEXT("/D FPO=1");
CString strRlsRes = TEXT("/d FPO=1");
tmp.Format("/out:\"release/%s.sys\"", strProjName);
CString strRlsOutput = tmp;
tmp.Format("/libpath:\"%s\\lib\\i386\\free\"", ddkDir);
CString strRlsLibPath = tmp;
// CString strCustFile = TEXT("NTServiceEventLogMsg.mc");
// CString strCustDesc = TEXT("Generating Message Catalogue");
// CString strCustCmd = TEXT("mc -v -w $(InputName)");
// CString strCustOut = TEXT("NTServiceEventLogMsg.rc\nNTServiceEventLogMsg.h");
// Compiler flags: (Debug) Multithreaded DLL, Enable RTTI
// CString strCFlagsR = TEXT("/MD /GR");
// CString strCFlagsD = TEXT("/MDd /GR");
BSTR bstrToolCl = strToolCl.AllocSysString();
BSTR bstrToolLink = strToolLink.AllocSysString();
BSTR bstrToolRes = strToolRes.AllocSysString();
BSTR bstrToolMFC = strToolMFC.AllocSysString();
BSTR bstrWindows = strWindows.AllocSysString();
BSTR bstrNative = strNative.AllocSysString();
BSTR bstrCallConv = strCallConv.AllocSysString();
BSTR bstrEH = strEH.AllocSysString();
BSTR bstrNoMFC = strNoMFC.AllocSysString();
BSTR bstrStructAlign= strStructAlign.AllocSysString();
BSTR bstrRelease = strRelease.AllocSysString();
BSTR bstrIncrement = strIncrement.AllocSysString();
BSTR bstrPreprocessor= strPreprocessor.AllocSysString();
BSTR bstrDbgInfo = strDbgInfo.AllocSysString();
BSTR bstrDftLib = strDftLib.AllocSysString();
BSTR bstrNoDftLib = strNoDftLib.AllocSysString();
BSTR bstrDDKLib = strDDKLib.AllocSysString();
BSTR bstrNoPdb = strNoPdb.AllocSysString();
BSTR bstrEntry = strEntry.AllocSysString();
BSTR bstrResources = strResources.AllocSysString();
BSTR bstrDbgC7Compatible= strDbgC7Compatible.AllocSysString();
BSTR bstrDbgPreprocessor= strDbgPreprocessor.AllocSysString();
BSTR bstrDbgRes = strDbgRes.AllocSysString();
BSTR bstrDbgOptions = strDbgOptions.AllocSysString();
BSTR bstrDbgOutput = strDbgOutput.AllocSysString();
BSTR bstrDbgLibPath = strDbgLibPath.AllocSysString();
BSTR bstrRlsPreprocessor= strRlsPreprocessor.AllocSysString();
BSTR bstrRlsRes = strRlsRes.AllocSysString();
BSTR bstrRlsOutput = strRlsOutput.AllocSysString();
BSTR bstrRlsLibPath = strRlsLibPath.AllocSysString();
// BSTR bstrCustFile = strCustFile.AllocSysString();
// BSTR bstrCustDesc = strCustDesc.AllocSysString();
// BSTR bstrCustCmd = strCustCmd.AllocSysString();
// BSTR bstrCustOut = strCustOut.AllocSysString();
// BSTR bstrCFlagsR = strCFlagsR.AllocSysString();
// BSTR bstrCFlagsD = strCFlagsD.AllocSysString();
// loop through all the possible configurations and
// change the settings
long lCount;
pAllConf->get_Count(&lCount);
for( register long i = 1 ; i <= lCount ; ++i )
{
IConfiguration * pConf = 0;
COleVariant idx(i);
pAllConf->Item(idx, &pConf);
if( pConf )
{
BSTR bstrName;
pConf->get_Name(&bstrName);
CString strName = bstrName;
pConf->AddToolSettings(bstrToolMFC, bstrNoMFC, var);
pConf->RemoveToolSettings(bstrToolLink, bstrWindows, var);
pConf->AddToolSettings(bstrToolLink, bstrNative, var);
// pConf->AddCustomBuildStepToFile(bstrCustFile, bstrCustCmd, bstrCustOut, bstrCustDesc, var);
pConf->AddToolSettings(bstrToolCl, bstrCallConv, var);
pConf->AddToolSettings(bstrToolCl, bstrStructAlign, var);
pConf->AddToolSettings(bstrToolCl, bstrPreprocessor, var);
pConf->RemoveToolSettings(bstrToolLink, bstrDbgInfo, var);
pConf->RemoveToolSettings(bstrToolLink, bstrDftLib, var);
pConf->AddToolSettings(bstrToolLink, bstrNoDftLib, var);
pConf->AddToolSettings(bstrToolLink, bstrDDKLib, var);
pConf->RemoveToolSettings(bstrToolLink, bstrNoPdb, var);
pConf->AddToolSettings(bstrToolLink, bstrEntry, var);
pConf->AddToolSettings(bstrToolLink , bstrIncrement, var);
pConf->RemoveToolSettings(bstrToolCl, bstrEH, var);
pConf->AddToolSettings(bstrToolRes, bstrResources, var);
if(strName.Find(TEXT("Debug")) >= 0)
{
// pConf->AddToolSettings(bstrToolCl, bstrCFlagsD, var);
pConf->AddToolSettings(bstrToolCl, bstrDbgC7Compatible, var);
pConf->AddToolSettings(bstrToolCl, bstrDbgPreprocessor, var);
pConf->AddToolSettings(bstrToolCl, bstrDbgOptions, var);
pConf->RemoveToolSettings(bstrToolCl, bstrRelease, var);
pConf->RemoveToolSettings(bstrToolLink , bstrDbgOutput, var);
pConf->AddToolSettings(bstrToolLink, bstrDbgOutput, var);
pConf->AddToolSettings(bstrToolLink, bstrDbgLibPath, var);
pConf->AddToolSettings(bstrToolRes, bstrDbgRes, var);
}
else
{
// pConf->AddToolSettings(bstrToolCl, bstrCFlagsR, var);
pConf->AddToolSettings(bstrToolCl, bstrRlsPreprocessor, var);
pConf->RemoveToolSettings(bstrToolLink , bstrRlsOutput, var);
pConf->AddToolSettings(bstrToolLink, bstrRlsOutput, var);
pConf->AddToolSettings(bstrToolLink, bstrRlsLibPath, var);
pConf->AddToolSettings(bstrToolRes, bstrRlsRes, var);
}
pConf->Release();
::SysFreeString(bstrName);
} else
AfxMessageBox(TEXT("failed to set settings for the new project"));
}
// do not forget to free all sys-strings !
::SysFreeString(bstrProjName);
::SysFreeString(bstrToolCl);
::SysFreeString(bstrToolLink);
::SysFreeString(bstrToolRes);
::SysFreeString(bstrToolMFC);
::SysFreeString(bstrNative);
::SysFreeString(bstrCallConv);
::SysFreeString(bstrEH);
::SysFreeString(bstrStructAlign);
::SysFreeString(bstrRelease);
::SysFreeString(bstrIncrement);
::SysFreeString(bstrPreprocessor);
::SysFreeString(bstrNoMFC);
::SysFreeString(bstrDbgC7Compatible);
::SysFreeString(bstrDbgPreprocessor);
::SysFreeString(bstrDbgRes);
::SysFreeString(bstrDbgOptions);
::SysFreeString(bstrDbgOutput);
::SysFreeString(bstrDbgLibPath);
::SysFreeString(bstrRlsPreprocessor);
::SysFreeString(bstrRlsRes);
::SysFreeString(bstrRlsOutput);
::SysFreeString(bstrRlsLibPath);
// ::SysFreeString(bstrCustFile);
// ::SysFreeString(bstrCustDesc);
// ::SysFreeString(bstrCustCmd);
// ::SysFreeString(bstrCustOut);
// ::SysFreeString(bstrCFlagsR);
// ::SysFreeString(bstrCFlagsD);
::SysFreeString(bstrDbgInfo);
::SysFreeString(bstrDftLib);
::SysFreeString(bstrNoDftLib);
::SysFreeString(bstrDDKLib);
::SysFreeString(bstrNoPdb);
::SysFreeString(bstrEntry);
::SysFreeString(bstrResources);
pAllConf->Release();
} else
AfxMessageBox(TEXT("failed to set settings for the new project"));
}
// Here we define one instance of the CDrv_WizardAppWiz class. You can access
// m_Dictionary and any other public members of this class through the
// global Drv_Wizardaw.
CDrv_WizardAppWiz Drv_Wizardaw;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -