c++篇 cad.arx配置3.调试,自动加载和卸载命令,学会看宏命令

如果你没有看过[cad.arx配置1],建议你先去看,因为我大修过一次,

以下文章可能存在旧信息,不如前篇描述得好,例如环境变量配置等等...

顺带一提, vs2019切换.cpp和.h用ctrl+k o

修改VS程序文件令它自动配置

按照e大的教程,修改 default.js 这个文件可以达到一劳永逸,令新建工程的时候自动配置上面所有的修改项,

win10的路径:

C:\Program Files (x86)\Autodesk\ObjectARX Wizards for AutoCAD 2008\ArxAppWiz\Scripts\1033

C:\Program Files (x86)\Autodesk\ObjectARX Wizards for AutoCAD 2012\ArxAppWiz\Scripts\1033

win7的路径:

C:\Program Files\Autodesk\ObjectARX Wizards for AutoCAD 2008\ArxAppWiz\Scripts\1033

C:\Program Files\Autodesk\ObjectARX Wizards for AutoCAD 2012\ArxAppWiz\Scripts\1033

设置启动直接加载

img

vs2005和vs2010添加这一行:

DebugTool.CommandArguments ='/ld \"$(OutDir)\$(ProjectName)$(TargetExt)\"' ;

设置输出文件

img

vs2005和vs2010修改这一行:

LinkTool.OutputFile ='\"$(OutDir)\\$(ProjectName).arx\"' ;

vs2005设置default.js

//- Copyright (c) Autodesk, Inc. All rights reserved.
//- by Cyrille Fauvel - Autodesk Developer Technical Services

function OnFinish (selProj, selObj) {
   try {
       var strProjectPath =wizard.FindSymbol ('PROJECT_PATH') ;
       var strProjectName =wizard.FindSymbol ('PROJECT_NAME') ;
       wizard.AddSymbol ("UPPER_CASE_PROJECT_NAME", strProjectName.toUpperCase ()) ;
       
       wizard.AddSymbol ("SAFE_PROJECT_NAME", CreateSafeName (strProjectName)) ;
       wizard.AddSymbol ("UPPER_CASE_SAFE_PROJECT_NAME", CreateSafeName (strProjectName.toUpperCase ())) ;

       selProj =CreateCustomProject (strProjectName, strProjectPath) ;
       AddConfigs (selProj, strProjectName) ;
       AddFilters (selProj) ;

       var InfFile =CreateCustomInfFile () ;
       AddFilesToCustomProj (selProj, strProjectName, strProjectPath, InfFile) ;
       PchSettings (selProj) ;
       InfFile.Delete () ;
       
       selProj.Object.Save () ;
       
       var bOmf =wizard.FindSymbol ("OMF_APP") ;
       if ( bOmf )
           MakeOmfResourceProject (selProj, strProjectPath, strProjectName)

   } catch (e) {
       if ( e.description.length != 0 )
           SetErrorInfo (e) ;
       return (e.number) ;
   }
}

//-----------------------------------------------------------------------------
function CreateCustomProject (strProjectName, strProjectPath) {
   try {
       var strProjTemplatePath =wizard.FindSymbol ('PROJECT_TEMPLATE_PATH') ;
       var strProjTemplate ='' ;
       strProjTemplate =strProjTemplatePath + '\\default.vcproj' ;

       var Solution =dte.Solution ;
       var strSolutionName ='' ;
       if ( wizard.FindSymbol ('CLOSE_SOLUTION') ) {
           Solution.Close () ;
           strSolutionName =wizard.FindSymbol ('VS_SOLUTION_NAME') ;
           if ( strSolutionName.length ) {
               var strSolutionPath =strProjectPath.substr (0, strProjectPath.length - strProjectName.length) ;
               Solution.Create (strSolutionPath, strSolutionName) ;
           }
       }

       var strProjectNameWithExt ='' ;
       strProjectNameWithExt =strProjectName + '.vcproj' ;

       var oTarget =wizard.FindSymbol ('TARGET') ;
       var prj ;
       if ( wizard.FindSymbol ('WIZARD_TYPE') == vsWizardAddSubProject ) { //----- vsWizardAddSubProject
           var prjItem =oTarget.AddFromTemplate (strProjTemplate, strProjectNameWithExt) ;
           prj =prjItem.SubProject ;
       } else {
           prj =oTarget.AddFromTemplate (strProjTemplate, strProjectPath, strProjectNameWithExt) ;
       }
       return (prj) ;
   } catch (e) {
       throw e ;
   }
}

//-----------------------------------------------------------------------------
function AddConfigs (proj, strProjectName) {
   try {
       //- Win32
       AddConfig (proj, strProjectName, /*Debug*/true, /*Win32*/true) ;
       AddConfig (proj, strProjectName, /*Release*/false, /*Win32*/true) ;
       //- x64
       var plist =proj.ConfigurationManager.SupportedPlatforms.toArray () ;
       for ( var i =0 ; i < plist.length ; i++ ) {
           if ( plist [i] == 'x64' ) {
               proj.ConfigurationManager.AddPlatform ('x64', 'x64', true) ;
               AddConfig (proj, strProjectName, /*Debug*/true, /*x64*/false) ;
               AddConfig (proj, strProjectName, /*Release*/false, /*x64*/false) ;
               break ;
           }
       }
  } catch ( e ) {
       throw e ;
  }
}

function AddConfig (proj, strProjectName, bDebug, bWin32) {
   try {
       var szRds =wizard.FindSymbol ('RDS_SYMB') ;
       var bArxAppType =wizard.FindSymbol ('APP_ARX_TYPE') ;
       var bOmfAppType =wizard.FindSymbol ('OMF_APP') ;
       var bMfcExtDll =wizard.FindSymbol ('MFC_EXT_SHARED') ;
       var bSharedMfc =(wizard.FindSymbol ('MFC_REG_SHARED') || bMfcExtDll) ;
       var bMfcSupport =(wizard.FindSymbol ('MFC_REG_STATIC') || bSharedMfc) ;
       var bUseAtl =wizard.FindSymbol ('ATL_COM_SERVER') ;
       var bComServer =(wizard.FindSymbol ('STD_COM_SERVER') || bUseAtl) ;
       var bDotNetModule =wizard.FindSymbol ('DOTNET_MODULE') ;
       var bImplDebug =wizard.FindSymbol ('IMPL_DEBUG') ;
       var szUprProjectName =CreateSafeName (strProjectName.toUpperCase ()) ;
   
       var cfgName =bDebug ? 'Debug' : 'Release' ;
       cfgName +='|' + (bWin32 ? 'Win32' : 'x64') ;
       var config =proj.Object.Configurations (cfgName) ;
       if ( config == null )
           return ;
       config.ConfigurationType =typeDynamicLibrary ;
       config.IntermediateDirectory ='$(PlatformName)\\$(ConfigurationName)' ;
       config.OutputDirectory ='$(SolutionDir)$(PlatformName)\\$(ConfigurationName)' ;
       config.CharacterSet =charSetUnicode ;
       config.useOfMfc =bMfcSupport ? useMfcDynamic : useMfcStdWin ;
       config.useOfAtl =bUseAtl ? useATLDynamic : useATLNotSet ;
       config.ManagedExtensions =bDotNetModule ;

       var CLTool =config.Tools ('VCCLCompilerTool') ;
       CLTool.DebugInformationFormat =/*debugOption.*/bDebug ? (bWin32 ? debugEditAndContinue : debugEnabled) : debugDisabled ;
       CLTool.WarningLevel =warningLevel_1 ;
       CLTool.TreatWChar_tAsBuiltInType =true ;
       CLTool.Detect64BitPortabilityProblems =true ;
       CLTool.ForceConformanceInForLoopScope =true ;
       CLTool.Optimization =bDebug ? optimizeDisabled : optimizeMaxSpeed ;
       CLTool.MinimalRebuild =bDebug ;
       CLTool.StringPooling =!bDebug ;
       CLTool.BasicRuntimeChecks =bDebug ? runtimeBasicCheckAll : runtimeBasicCheckNone ;
       CLTool.BufferSecurityCheck =true ;
       CLTool.RuntimeLibrary =rtMultiThreadedDLL ;
       CLTool.RuntimeTypeInfo =true ;
       CLTool.UsePrecompiledHeader =/*pchCreateUsingSpecific*//*pchGenerateAuto*/pchUseUsingSpecific ;
       //CLTool.PrecompiledHeaderFile ="StdAfx.h" ;
       //- AD_UNICODE UNICODE _UNICODE are added either by .h or setting unicode at the project level
       //- We do not add _DEBUG anymore to avoid problems on Release AutoCAD platform
       CLTool.PreprocessorDefinitions +=bWin32 ? 'WIN32' : '_WIN64' ;
       CLTool.PreprocessorDefinitions +=';_WINDOWS;' + szUprProjectName + '_MODULE' ;
       CLTool.PreprocessorDefinitions +=bDebug ? ''/*;_DEBUG*/ : ';NDEBUG' ;
       CLTool.PreprocessorDefinitions +=bImplDebug && bDebug ? ';_DEBUG' : '' ;
       CLTool.PreprocessorDefinitions +=bMfcExtDll ? ';_AFXEXT' : '' ;
       CLTool.PreprocessorDefinitions +=bArxAppType ? ';_ACRXAPP' : ';_DBXAPP' ;
       if ( bOmfAppType ) {
           CLTool.PreprocessorDefinitions +=';_OMFAPP;USE_ACAD_MODELER' ;
           CLTool.PreprocessorDefinitions +=bArxAppType ? '' : ';DBX' ;
           CLTool.AdditionalOptions +='-Zm1000' ;
       }
       if ( bDotNetModule ) {
           CLTool.CompileAsManaged =/*managedAssembly*/managedAssemblyOldSyntax ;
           CLTool.Detect64BitPortabilityProblems =false ;
           CLTool.BasicRuntimeChecks =/*basicRuntimeCheckOption.*/runtimeBasicCheckNone ;
           CLTool.DebugInformationFormat =/*debugOption.*/bDebug ? debugEnabled : debugDisabled ;
           CLTool.MinimalRebuild =false ;
       }

       var LinkTool =config.Tools ('VCLinkerTool') ;
       LinkTool.LinkIncremental =linkIncrementalYes ;
       if ( bDotNetModule )
           LinkTool.OutputFile ='$(outdir)/' + szRds + strProjectName + '.dll' ;
       else if ( bArxAppType )
           LinkTool.OutputFile ='\"$(OutDir)\\$(ProjectName).arx\"' ;
       else
           LinkTool.OutputFile ='$(outdir)/' + szRds + strProjectName + '.dbx' ;
       LinkTool.LinkDLL =true ;
       if ( bOmfAppType )
           LinkTool.EntryPointSymbol ='DllMain' ;
       //LinkTool.ModuleDefinitionFile =strProjectName + '.def' ;
       LinkTool.SubSystem =subSystemWindows ;
       LinkTool.GenerateDebugInformation =bDebug ;
       LinkTool.ProgramDatabaseFile =bDebug ? '$(OutDir)/' + strProjectName + '.pdb' : '' ;
       LinkTool.ImportLibrary ='$(OutDir)/' + strProjectName + '.lib' ;
       LinkTool.TargetMachine =/*machineTypeOption.*/bWin32 ? machineX86 : machineAMD64 ;

       if ( bComServer ) {
           var MidlTool =config.Tools ("VCMidlTool") ;
           MidlTool.MkTypLibCompatible =false ;
           MidlTool.TargetEnvironment =/*midlTargetEnvironment.*/bWin32 ? midlTargetWin32 : midlTargetNotSet ;
           MidlTool.PreprocessorDefinitions =bDebug ? ''/*_DEBUG'*/ : 'NDEBUG' ;
           MidlTool.PreprocessorDefinitions +=bImplDebug && bDebug ? '_DEBUG' : '' ;
           MidlTool.HeaderFileName ='$(InputName).h' ;
           MidlTool.InterfaceIdentifierFileName =strProjectName + '_i.c' ;
           MidlTool.ProxyFileName =strProjectName + '_p.c' ;
           MidlTool.GenerateStublessProxies =true ;
           MidlTool.GenerateTypeLibrary  =true ;
           MidlTool.TypeLibraryName ='$(IntDir)/' + szRds + strProjectName + '.tlb' ;
           MidlTool.DLLDataFileName ='' ;
       }
           
       var RCTool =config.Tools ('VCResourceCompilerTool') ;
       RCTool.Culture =rcEnglishUS ;
       RCTool.AdditionalIncludeDirectories ='$(IntDir)' ;
       RCTool.PreprocessorDefinitions =bImplDebug && bDebug ? '_DEBUG' : '' ;
       
       var regkey =new ActiveXObject ('WScript.Shell') ;
       var strAcadVersion ='' ;
       try {
           strAcadVersion =regkey.RegRead ('HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD\\CurVer') ;
       } catch (e) {
           strAcadVersion ='R17.1' ;
       }
       var strAcad ='' ;
       try {
           strAcad =regkey.RegRead ('HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD\\' + strAcadVersion + '\\CurVer') ;
       } catch (e) {
           strAcad ='ACAD:6001-409' ;
       }
       if ( strAcad == null || strAcad == '' ) {
           var objRegistry =new ActiveXObject ('RegObj.Registry') ;    
           var key =objRegistry.RegKeyFromString ('\\HKEY_LOCAL_MACHINE\\SOFTWARE\\Autodesk\\AutoCAD\\' + strAcadVersion) ;
           var subKeys =key.SubKeys ;
           strAcad =subKeys.Item (1).Name ;
       }
       var strAcadPath ='' ;
       try {
           strAcadPath =regkey.RegRead ('HKEY_LOCAL_MACHINE\\SOFTWARE\\Autodesk\\AutoCAD\\' + strAcadVersion + '\\' + strAcad + '\\AcadLocation') ;
       } catch (e) {
           strAcadPath ='c:\\Program Files\\AutoCAD' ;
       }

       var DebugTool =config.DebugSettings ;
       DebugTool.Command =strAcadPath + '\\acad.exe' ;
       DebugTool.CommandArguments ='/ld \"$(OutDir)\$(ProjectName)$(TargetExt)\"' ;
     
       CLTool.AdditionalUsingDirectories +=strAcadPath ;
   } catch (e) {
       throw e ;
   }
}

//-----------------------------------------------------------------------------
function AddFilters (proj) {
   try     {
       //----- Add the folders to your project
       var group =proj.Object.AddFilter ('Source Files') ;
       group.Filter ='cpp;c;cc;cxx;def;idl;odl' ;
       
       group =proj.Object.AddFilter ('Include Files') ;
       group.Filter ='h;hh;hxx' ;
       
       group =proj.Object.AddFilter ('Resource Files') ;
       group.Filter ='rc;ico;bmp;cur;jpg;gif' ;

       group =proj.Object.AddFilter ('Miscellaneous Files') ;
       group.Filter ='reg;rgs;mak;clw;vsdir;vsz;css;inf;vcproj;csproj' ;
   } catch (e) {
       throw e ;
   }
}

//-----------------------------------------------------------------------------
function PchSettings (proj) {
   try {
   //    var bDotNetModule =wizard.FindSymbol ('DOTNET_MODULE') ;
   //    if ( bDotNetModule ) {
           //- Win32
           var FileTool =GetFileTool (proj, 'Debug|Win32', 'StdAfx.cpp') ;
           FileTool.UsePrecompiledHeader =pchCreateUsingSpecific ;
           FileTool =GetFileTool (proj, 'Release|Win32', 'StdAfx.cpp') ;
           FileTool.UsePrecompiledHeader =pchCreateUsingSpecific ;
           //- x64
           var FileTool =GetFileTool (proj, 'Debug|x64', 'StdAfx.cpp') ;
              if ( FileTool != null )
               FileTool.UsePrecompiledHeader =pchCreateUsingSpecific ;
           FileTool =GetFileTool (proj, 'Release|x64', 'StdAfx.cpp') ;
           if ( FileTool != null )
               FileTool.UsePrecompiledHeader =pchCreateUsingSpecific ;
   //    }
   } catch (e) {
       throw e ;
   }
}

//-----------------------------------------------------------------------------
function DelFile (fso, strWizTempFile) {
   try {
       if ( fso.FileExists (strWizTempFile) ) {
           var tmpFile =fso.GetFile (strWizTempFile) ;
           tmpFile.Delete () ;
       }
   } catch (e) {
       throw e ;
   }
}

//-----------------------------------------------------------------------------
function CreateCustomInfFile () {
   try {
       var fso, TemplatesFolder, TemplateFiles, strTemplate ;
       fso =new ActiveXObject ('Scripting.FileSystemObject') ;

       var TemporaryFolder =2 ;
       var tfolder =fso.GetSpecialFolder (TemporaryFolder) ;
       var strTempFolder =tfolder.Drive + '\\' + tfolder.Name ;

       var strWizTempFile =strTempFolder + '\\' + fso.GetTempName () ;

       var strTemplatePath =wizard.FindSymbol ('TEMPLATES_PATH') ;
       var strInfFile =strTemplatePath + '\\Templates.inf' ;
       wizard.RenderTemplate (strInfFile, strWizTempFile) ;

       var WizTempFile =fso.GetFile (strWizTempFile) ;
       return (WizTempFile) ;
   } catch (e) {
       throw e ;
   }
}

//-----------------------------------------------------------------------------
function GetTargetName (strName, strProjectName) {
   try {
       //----- Set the name of the rendered file based on the template filename
       var strTarget =strName ;

       if ( strName.substr (0, 4) == 'Root' )
           strTarget =strProjectName + strName.substr (4, strName.length - 4) ;

       if ( strName.substr (0, 3) == 'Omf' )
           strTarget =strProjectName + strName.substr (3, strName.length - 3) ;

       return (strTarget) ;
   } catch (e) {
       throw e ;
   }
}

//-----------------------------------------------------------------------------
function AddFilesToCustomProj (proj, strProjectName, strProjectPath, InfFile) {
   try {
       var projItems =proj.ProjectItems ;

       var strTemplatePath =wizard.FindSymbol ('TEMPLATES_PATH') ;

       var strTpl ='' ;
       var strName ='' ;

       var strTextStream =InfFile.OpenAsTextStream (1, -2) ;
       while ( !strTextStream.AtEndOfStream ) {
           strTpl =strTextStream.ReadLine () ;
           if ( strTpl != '' ) {
               strName =strTpl ;
               var strTarget =GetTargetName(strName, strProjectName) ;
               var strTemplate =strTemplatePath + '\\' + strTpl ;
               var strFile =strProjectPath + '\\' + strTarget ;

               var bCopyOnly =false ;  //----- "true" will only copy the file from strTemplate to strTarget without rendering/adding to the project
               var strExt =strName.substr (strName.lastIndexOf ('.')) ;
               if ( strExt == '.bmp' || strExt==".ico" || strExt=='.gif' || strExt=='.rtf' || strExt=='.css' )
                   bCopyOnly =true ;
               wizard.RenderTemplate (strTemplate, strFile, bCopyOnly) ;
               proj.Object.AddFile (strFile) ;
           }
       }
       strTextStream.Close () ;
   } catch (e) {
       throw e ;
   }
}

function RemoveFileFromProject (proj, FileName) {
   try {
       var col =proj.Object.Files ;
       var file =col.Item (FileName) ;
       if ( file != null )
           proj.Object.RemoveFile (file) ;
   } catch (e) {
       throw e ;
   }
}

function GetFileTool (proj, Config, FileName) {
   try {
       var col =proj.Object.Files ;
       var file =col.Item (FileName) ;
       var config =file.FileConfigurations.Item (Config) ;
       if ( config == null )
           return (null) ;
       var tool =config.Tool
       return (tool)
   } catch (e) {
       throw e ;
       return (null) ;
   }
}

//-----------------------------------------------------------------------------
function MakeOmfResourceProject (selProj, strProjectPath, strProjectName) {
   //- So we need a resource only DLL
   RenderAddTemplate (wizard, "OmfEnuRes.h", strProjectPath + "\\Enu\\Resource.h", false, false) ;
   RenderAddTemplate (wizard, "OmfEnuRes.rc", strProjectPath + "\\Enu\\" + strProjectName + "Enu.rc", false, false) ;
   //----- Create CLSID
   var strResGUID =wizard.CreateGuid () ;
   var strFormattedGUID =wizard.FormatGuid (strResGUID, 0) ;
   wizard.AddSymbol ("PROJECT_RES_GUID", strFormattedGUID) ;
   RenderAddTemplate (wizard, "OmfEnuRes.vcproj", strProjectPath + "\\Enu\\" + strProjectName + "Enu.vcproj", false, false) ;
   
   var resDllProj =selProj.DTE.Solution.AddFromFile (strProjectPath + "\\Enu\\" + strProjectName + "Enu.vcproj", false) ;
   var deps =selProj.DTE.Solution.SolutionBuild.BuildDependencies ;
   for ( var i =1 ; i <= deps.Count ; i++ ) {
       var dep =deps.Item (i) ;
       if ( dep.Project.UniqueName == selProj.UniqueName ) {
           dep.AddProject (resDllProj.UniqueName) ;
           break ;
       }
   }
}

我是如何找到.CommandArguments这个属性的....除了可以设置一下vs2019到英文版(需要单独下载语言包),

还可以通过这个链接的介绍vs调试器的各种参数..

vs2010设置

img

去掉就是V100平台集.

(完)

posted @ 2020-05-01 21:21  惊惊  阅读(820)  评论(0编辑  收藏  举报