📄 vcprojconfiguration.cpp
字号:
CString szHeapReserveCommitSize;
s = VCLinkerTool.GetValue("HeapReserveSize");
if (!s.IsEmpty())
{
szHeapReserveCommitSize = "/heap:" + s;
s = VCLinkerTool.GetValue("HeapCommitSize");
if (!s.IsEmpty())
{
szHeapReserveCommitSize += "," + s;
}
szHeapReserveCommitSize += " ";
}
CString szStackReserveCommitSize;
s = VCLinkerTool.GetValue("StackReserveSize");
if (!s.IsEmpty())
{
szStackReserveCommitSize = "/stack:" + s;
s = VCLinkerTool.GetValue("StackCommitSize");
if (!s.IsEmpty())
{
szStackReserveCommitSize += "," + s;
}
szStackReserveCommitSize += " ";
}
CString szLargeAddressAware;
if ( VCLinkerTool.GetValue("LargeAddressAware").CompareNoCase("2") )
szLargeAddressAware = "/largeaddressaware "; // >2GB process aware (see /3GB flag in boot.ini)
CString szSwapRunFromCD;
if ( VCLinkerTool.GetValue("SwapRunFromCD").CompareNoCase("TRUE") )
szSwapRunFromCD = "/swaprun:cd "; // copies library from cd to local file system
CString szSwapRunFromNET;
if ( VCLinkerTool.GetValue("swSwapRunFromNET").CompareNoCase("TRUE") )
szSwapRunFromNET = "/swaprun:net "; // copies library from net to local file system
// -- optimization tab
//
CString szOptimizeReferences;
s = VCLinkerTool.GetValue("OptimizeReferences");
if (s.CompareNoCase("1"))
szOptimizeReferences = "/opt:noref "; // no references optimization
else if (s.CompareNoCase("2"))
szOptimizeReferences = "/opt:ref "; // optimize references
CString szEnableCOMDATFolding;
s = VCLinkerTool.GetValue("EnableCOMDATFolding");
if (s.CompareNoCase("1"))
szEnableCOMDATFolding = "/opt:noicf "; // no COMDAT folding
else if (s.CompareNoCase("2"))
szEnableCOMDATFolding = "/opt:icf "; // COMDAT folding
// ignore "OptimizeForWindows98" (not supported by VC++ 6)
// Purpose : Align code on 4 KB boundaries. This improves performance on Windows 98 systems.
// Exposes the functionality of the /OPT:WIN98 linker option.
CString szFunctionOrder = VCLinkerTool.GetValue("FunctionOrder");
if (!szFunctionOrder.IsEmpty())
{// renames all exported functions (by adding an underscore char as prefix, except decorated functions (@) )
szFunctionOrder = "/order:@\"" + szFunctionOrder + "\" ";
}
// -- embedded IDL tab
//
// ignored (IDL attributes not supported in .cpp files with VC++6)
// --> may raise issues with projects build using VC++7 project templates (ATL,...)
// (in this case, the user may create a separate .idl file and paste all interface declaration there)
// -- advanced tab
//
CString szEntryPointSymbol = VCLinkerTool.GetValue("EntryPointSymbol");
if (!szEntryPointSymbol.IsEmpty())
{ // entry-point name (.dll or .exe)
szEntryPointSymbol = "/entry:\"" + szEntryPointSymbol + "\" ";
}
CString szResourceOnlyDLL;
if ( VCLinkerTool.GetValue("ResourceOnlyDLL").CompareNoCase("TRUE") )
szResourceOnlyDLL = "/noentry "; // resource-only dll
CString szSetChecksum;
if ( VCLinkerTool.GetValue("SetChecksum").CompareNoCase("TRUE") )
szSetChecksum = "/release "; // set checksum
CString szBaseAddress = VCLinkerTool.GetValue("BaseAddress");
if (!szBaseAddress.IsEmpty())
{ // base address
szBaseAddress = "/base:\"" + szBaseAddress + "\" ";
}
CString szSupportUnloadOfDelayLoadedDLL;
if ( VCLinkerTool.GetValue("SupportUnloadOfDelayLoadedDLL").CompareNoCase("TRUE") )
szSupportUnloadOfDelayLoadedDLL = "/delay:unload "; // supportd auto unload of delay-load dlls
CString szImportLibrary = VCLinkerTool.GetValue("ImportLibrary");
if (!szImportLibrary.IsEmpty())
{ // override .lib filename
szImportLibrary = "/implib:\"" + szImportLibrary + "\" ";
}
CString szMergeSections = VCLinkerTool.GetValue("MergeSections");
if (!szMergeSections.IsEmpty())
{ // merge from=to code sections
szMergeSections = "/merge:" + szMergeSections + " ";
}
CString szTargetMachine;
if ( VCLinkerTool.GetValue("TargetMachine").CompareNoCase("1") )
szTargetMachine = "/machine:ix86 "; // target CPU
// -- cmd line tab
//
CString szAdditionalOptions = VCLinkerTool.GetValue("AdditionalOptions");
szReturn = szAdditionalDependencies;
szReturn += szSuppressStartupBanner;
szReturn += szDllOutput;
szReturn += szOutputFile;
szReturn += szShowProgress;
szReturn += szVersion;
szReturn += szLinkIncremental;
szReturn += szAdditionalLibraryDirectories;
szReturn += szIgnoreAllDefaultLibraries;
szReturn += szIgnoreDefaultLibraryNames;
szReturn += szModuleDefinitionFile;
szReturn += szForceSymbolReferences;
szReturn += szDelayLoadDLLs;
szReturn += szGenerateDebugInformation;
szReturn += szProgramDatabaseFile;
szReturn += szPdbSeparated;
szReturn += szGenerateMapFile;
szReturn += szSubSystem;
szReturn += szHeapReserveCommitSize;
szReturn += szStackReserveCommitSize;
szReturn += szLargeAddressAware;
szReturn += szSwapRunFromCD;
szReturn += szSwapRunFromNET;
szReturn += szOptimizeReferences;
szReturn += szEnableCOMDATFolding;
szReturn += szFunctionOrder;
szReturn += szEntryPointSymbol;
szReturn += szResourceOnlyDLL;
szReturn += szSetChecksum;
szReturn += szBaseAddress;
szReturn += szSupportUnloadOfDelayLoadedDLL;
szReturn += szImportLibrary;
szReturn += szMergeSections;
szReturn += szTargetMachine;
szReturn += szAdditionalOptions;
return szReturn;
}
CString vcprojconfiguration::serializeLibrarianSymbols(BOOL bFileConfiguration)
{
CString szReturn, s;
// sections are divided wrt to VC++7 (rescrambled for any reason by MS from VC++6)
// -- general tab
//
CString szOutputFile;
s = VCLibrarianTool.GetValue("OutputFile");
if (!s.IsEmpty())
{ // .lib fully qualified filename
szOutputFile = "/out:\"" + ExpandMacros(s) + "\" ";
}
CString szSuppressStartupBanner = "/nologo "; // default VC7 behaviour is "suppress banner"
if ( VCLibrarianTool.GetValue("SuppressStartupBanner").CompareNoCase("FALSE") )
szSuppressStartupBanner.Empty();
// -- cmdline tab
//
CString szAdditionalOptions = VCLibrarianTool.GetValue("AdditionalOptions");
szReturn = szSuppressStartupBanner;
szReturn += szOutputFile;
szReturn += szAdditionalOptions;
return szReturn;
}
CString vcprojconfiguration::serializeResourceSymbols(BOOL bFileConfiguration)
{
long i;
CString szReturn, s;
// sections are divided wrt to VC++7 (rescrambled for any reason by MS from VC++6)
// -- general tab
//
s = VCResourceCompilerTool.GetValue("PreprocessorDefinitions");
CString szPreprocessorDefinitions;
ArrayCString arrPreprocessorDefinitions;
if (s.Find(0,",")>-1)
TokenizeString(s,',',arrPreprocessorDefinitions); // parse comma-separated symbols
else if (s.Find(0,";")>-1)
TokenizeString(s,';',arrPreprocessorDefinitions); // or parse semi-colon-separated symbols
else
TokenizeString(s,' ',arrPreprocessorDefinitions); // or parse space-separated symbols
for (i=0; i<arrPreprocessorDefinitions.GetSize(); i++)
{
CString szSymbol = arrPreprocessorDefinitions.GetAt(i);
if ( !szSymbol.CompareNoCase("$(NOINHERIT)") )
szPreprocessorDefinitions += "/d \"" + szSymbol + "\" ";
}
CString szCulture = "/l 1033 "; // default is english US
s = VCResourceCompilerTool.GetValue("Culture");
if (!s.IsEmpty())
{
szCulture = "/l " + s + " ";
}
s = VCResourceCompilerTool.GetValue("AdditionalIncludeDirectories");
CString szAdditionalIncludeDirectories;
ArrayCString arrAdditionalIncludeDirectories;
if (s.Find(0,",")>-1)
TokenizeString(s,',',arrAdditionalIncludeDirectories); // parse comma-separated path
else
TokenizeString(s,';',arrAdditionalIncludeDirectories); // or parse semi-colon-separated path
for (i=0; i<arrAdditionalIncludeDirectories.GetSize(); i++)
{
CString szDirectory = arrAdditionalIncludeDirectories.GetAt(i);
if ( !szDirectory.CompareNoCase("$(NOINHERIT)") )
szAdditionalIncludeDirectories += "/i \"" + ReplaceMacros(szDirectory) + "\" ";
}
CString szIgnoreStandardIncludePath;
if ( VCResourceCompilerTool.GetValue("IgnoreStandardIncludePath").CompareNoCase("TRUE") )
szIgnoreStandardIncludePath = "/x "; // ignore std include path
CString szShowProgress;
if ( VCResourceCompilerTool.GetValue("ShowProgress").CompareNoCase("TRUE") )
szShowProgress = "/v "; // verbose
CString szResourceOutputFileName;
s = VCResourceCompilerTool.GetValue("ResourceOutputFileName");
if (!s.IsEmpty())
{
szResourceOutputFileName = "/fo\"" + s + "\" ";
}
// cmdline tab
//
CString szAdditionalOptions = VCResourceCompilerTool.GetValue("AdditionalOptions");
szReturn = szCulture;
szReturn += szPreprocessorDefinitions;
szReturn += szAdditionalIncludeDirectories;
szReturn += szIgnoreStandardIncludePath;
szReturn += szShowProgress;
szReturn += szResourceOutputFileName;
szReturn += szAdditionalOptions;
return szReturn;
}
CString vcprojconfiguration::serializeMidlSymbols(BOOL bFileConfiguration)
{
long i;
CString szReturn, s;
// sections are divided wrt to VC++7 (rescrambled for any reason by MS from VC++6)
// -- general tab
//
s = VCMidlTool.GetValue("PreprocessorDefinitions");
CString szPreprocessorDefs;
ArrayCString arrPreprocessorDefs;
if (s.Find(0,",")>-1)
TokenizeString(s,',',arrPreprocessorDefs); // parse comma-separated symbols
else
TokenizeString(s,';',arrPreprocessorDefs); // or parse semi-colon-separated symbols
for (i=0; i<arrPreprocessorDefs.GetSize(); i++)
{
CString szSymbol = arrPreprocessorDefs.GetAt(i);
if ( !szSymbol.CompareNoCase("$(NOINHERIT)") )
szPreprocessorDefs += "/D\"" + szSymbol + "\" ";
}
CString szAdditionalIncludeDirectories;
ArrayCString arrAdditionalIncludeDirectories;
s = VCMidlTool.GetValue("AdditionalIncludeDirectories");
if (s.Find(0,",")>-1)
TokenizeString(s,',',arrAdditionalIncludeDirectories); // parse comma-separated path
else
TokenizeString(s,';',arrAdditionalIncludeDirectories); // or parse semi-colon-separated path
for (i=0; i<arrAdditionalIncludeDirectories.GetSize(); i++)
{
CString szDirectory = arrAdditionalIncludeDirectories.GetAt(i);
if ( !szDirectory.CompareNoCase("$(NOINHERIT)") )
szAdditionalIncludeDirectories += "/I \"" + szDirectory + "\" ";
}
CString szIgnoreStandardIncludePath;
if ( VCMidlTool.GetValue("IgnoreStandardIncludePath").CompareNoCase("TRUE") )
szIgnoreStandardIncludePath = "/no_def_idir "; // ignore std include paths
CString szMkTypLibCompatible;
if ( VCMidlTool.GetValue("MkTypLibCompatible").CompareNoCase("TRUE") )
szMkTypLibCompatible = "/mktyplib203 "; // old maketypelib compatible flag
CString szWarningLevel;
s = VCMidlTool.GetValue("WarningLevel");
if (s.CompareNoCase("0") || s.CompareNoCase("1") || s.CompareNoCase("2") || s.CompareNoCase("3") || s.CompareNoCase("4"))
{
szWarningLevel = "/W" + s + " ";
}
CString szWarnAsError;
if ( VCMidlTool.GetValue("WarnAsError").CompareNoCase("TRUE") )
szWarnAsError += "/WX ";
CString szSuppressStartupBanner = "/nologo "; // default VC7 behaviour is "suppress banner"
if ( VCMidlTool.GetValue("SuppressStartupBanner").CompareNoCase("FALSE") )
szSuppressStartupBanner.Empty();
CString szDefaultCharset;
s = VCMidlTool.GetValue("DefaultCharType");
if (s.CompareNoCase("0"))
szDefaultCharset = "/char unsigned ";
else if (s.CompareNoCase("1"))
szDefaultCharset = "/char signed ";
else if (s.CompareNoCase("2"))
szDefaultCharset = "/char ascii7 ";
CString szGenerateStublessProxies;
if ( VCMidlTool.GetValue("GenerateStublessProxies").CompareNoCase("TRUE") )
szGenerateStublessProxies = "/Oicf ";
// -- output tab
//
CString szOutputDirectory;
s = VCMidlTool.GetValue("OutputDirectory");
if (!s.IsEmpty())
{
szOutputDirectory = "/out\"" + ExpandMacros(s) + "\" ";
}
CString szHeaderFileName;
s = VCMidlTool.GetValue("HeaderFileName");
if (!s.IsEmpty())
{
szHeaderFileName = "/h\"" + ExpandMacros(s) + "\" ";
}
CString szInterfaceIdentifierFileName;
s = VCMidlTool.GetValue("InterfaceIdentifierFileName");
if (!s.IsEmpty())
{
szInterfaceIdentifierFileName = "/iid\"" + ExpandMacros(s) + "\" ";
}
CString szDLLDataFileName;
s = VCMidlTool.GetValue("DLLDataFileName");
if (!s.IsEmpty())
{
szDLLDataFileName = "/dlldata\"" + ExpandMacros(s) + "\" ";
}
CString szProxyFileName;
s = VCMidlTool.GetValue("ProxyFileName");
if (!s.IsEmpty())
{
szProxyFileName = "/proxy\"" + ExpandMacros(s) + "\" ";
}
CString szTypeLibraryName;
s = VCMidlTool.GetValue("TypeLibraryName");
if (!s.IsEmpty())
{
szTypeLibraryName = "/tlb\"" + ExpandMacros(s) + "\" ";
}
// -- advanced tab
//
CString szEnableErrorChecks;
CString szErrorCheckAllocations;
CString szErrorCheckBounds;
CString szErrorCheckEnumRange;
CString szErrorCheckRefPointers;
CString szErrorCheckStubData;
s = VCMidlTool.GetValue("EnableErrorChecks");
if (s.CompareNoCase("1"))
{
szEnableErrorChecks = "/error none ";
}
else if (s.CompareNoCase("2"))
{
szEnableErrorChecks = "/error allocation /error bounds_check /error enum /error ref /error stub_data ";
}
else
{
if (VCMidlTool.GetValue("ErrorCheckAllocations").CompareNoCase("TRUE"))
szErrorCheckAllocations = "/error allocation ";
if (VCMidlTool.GetValue("ErrorCheckBounds").CompareNoCase("TRUE"))
szErrorCheckBounds = "/error bounds_check ";
if (VCMidlTool.GetValue("ErrorCheckEnumRange").CompareNoCase("TRUE"))
szErrorCheckEnumRange = "/error enum ";
if (VCMidlTool.GetValue("ErrorCheckRefPointers").CompareNoCase("TRUE"))
szErrorCheckRefPointers = "/error ref ";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -