⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vcprojconfiguration.cpp

📁 将VC7.0和VC.NET的工程转换到VC6.0的工程,内有详细的介绍做法(自己试验后写的)
💻 CPP
📖 第 1 页 / 共 4 页
字号:

	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 + -