乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 134|回复: 9

也谈ObjectARX多版本批量编译

[复制链接]

29

主题

743

帖子

11

银币

中流砥柱

Rank: 25

铜币
858
发表于 2017-12-10 14:53:00 | 显示全部楼层 |阅读模式
也谈ObjectARX多版本批量编译
by edata 2017-12-10贴图比较麻烦详细图文可以访问:因某些原因,我的电脑系统依旧是windows XP,所以能安装的vs最高版本是vs2010,以下均在vs2010上实现,其他更高vs一样可以实现,原理是一样的。我的方式比较特殊,采用的是(hightflybird)的多版本解决方案,参见:安装vs2010,其他版本均只有vc编译器。一、准备工作:1.  安装Daffodil.ENU,下载地址:2.  解压绿色的vc编译器。(或者全部安装各版本的vs)。二、安装完Daffodil.ENU后,打开xp系统C:\Program Files或win7以及更高系统C:\Program Files(x86)文件夹(以下简称Program Files,不再区分)。在Program Files文件夹依次打开C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms我们先打开Win32\PlatformToolsets,下面有v60~v100等文件夹。先用文本软件如notpad++打开v60文件夹下的Microsoft.Cpp.Win32.v60. props在notpad++的语言菜单下,选择xml 语法高亮。我们主要对 [I] 进行修改和添加 之间改成如E:\vc\vc6\注意vc6后面一定要加一个”\”,不然后面的目录无法识别这个路径。在这个之后添加一个新的自定义标记C:\ObjectARX 2002\这个是指定ARX SDK的文件夹位置,MyARXDir是我自己定义的,后面可以用到。继续添加 x86 ,这个也是自定义,后面用到。向下寻找标记,在[I]之后添加一个新的包含路径,$(MyARXDir)inc;这个MyARXDir就是我们刚刚定义的,直接用$(标记)的方式引用过来了。同上继续寻找,在这后面添加$(MyARXDir)lib;,继续在之前(注意这里写的是之前)添加一个新的标记ASCII表示这个v60采用的是字符集是 “使用多字节方式”。          以下是完成后的截图(注意:我这里vc6是安装版的,所以VCInstallDir没有修改)同样的方式,我们修改v70文件夹下的Microsoft.Cpp.Win32.v70. props其他原理同上不再解释,仅仅提供图片参考。这里需要注意的是,我采用的是绿色版的v70编译器,修改了路径以及$(VCInstallDir)PlatformSDK\这个标记是指定windowsSDK的位置,MFC程序会用到这个路径。继续v80改造见图,注意v80,也就是ARX2007开始字符集集是unicode,向导默认的是unicode那个CharacterSet就可以不要了,或者将ASCII改为Unicode。继续v90继续v100 以上我们的win32平台改完了。现在看看x64V80x64V90x64V100x64MSBuild部分全部改完了。 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------下面要对arx wizard向导修改了。向导部分建议先按照我另外一个博文修改修改,修复一些常见问题。详见:我采用的向导版本是arx wizard2012,原因是这个版本在vs2010中有条,方便添加命令。以及自定义实体类的相关派生继承类。Arx2013开始就没有工具条这玩意了。。打开路径C:\Program Files\Autodesk\ObjectARX Wizards for  2012\ArxAppWiz\Scripts\1033右键notepad++ 打开default.js文件修改中间目录config.IntermediateDirectory ='$(Configuration)\\';修改,注意我们这里终于用上了前面定义的MyPlatform,这样我们生成的文件名就变成了sk_ArxProject2.R19d.x86.arx这样的格式。if ( bDotNetModule )
                  LinkTool.OutputFile ='$(outdir)' + szRds + strProjectName + '.$(Configuration)' + '.$(MyPlatform)' +'.dll' ;
              else if ( bArxAppType )
                     LinkTool.OutputFile ='$(outdir)' + szRds + strProjectName + '.$(Configuration)' + '.$(MyPlatform)' + '.arx' ;
              else
                     LinkTool.OutputFile ='$(outdir)' + szRds + strProjectName + '.$(Configuration)' + '.$(MyPlatform)' +'.dbx' ;修改debugtool自动加载上面那个strAcadPath是acad的路径,定义在最后的部分,我用的是cad2011调试,根据自己的情况更换成默认的版本。
现在基本上改完了,那么我们这么折腾有什么意义呢。。下面就简单介绍一下。下面要新建新的解决方案配置,先来个R19d基于debug的,如果是Release我会直接用R19,基于release,这里建议先从高版本开始新建配置,R19 R18 R17 R16 R15,(如果是向导生成的不建议直接用R15,因为向导的代码和R15的差异太大,修改起来得不偿失,可以通过R15升级到R19,也就是我安装vc6的其中一个原因。通过vc6新建arx项目,再通过vs2010打开升级到vs2010项目,修改一些附加库,现在这个R15版本很少用,具体不再讲述。)下面修改一下配置对应的平台,除了R16之外是win32,其他均是所有平台。 全部成功。后记:通过这种方式建立arx项目,不需要再去设置其他的东西,如包含目录,库目录。即可正常使用,当然,如果是需要额外的arxsdk,如brep之类的,还是需要设置的。也可以采用前面的方式吧相应的库和包含路径添加上去。真正实现一劳永逸。实际上理论上通过向导也可以自动生成R19d,R18d,这样的配置,还需要继续研究,剩下的就看你们的了。另外能不能在vs2010上编译R21,R20项目,也许还有R22,我可以很你们答案是可以的。至于怎么实现,也和这个差不多的,也许是下一遍博文了,也许没有了。^_^。Ps:键盘坏了,码字费力,一按到ESC键盘,就关机。。 附上修改后的文件,供参考 参考文件下载 :

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

29

主题

743

帖子

11

银币

中流砥柱

Rank: 25

铜币
858
发表于 2017-12-11 16:12:00 | 显示全部楼层
另外补充一下模板文件的一个修改。修改xp系统C:\Program Files\Autodesk\ObjectARX Wizards for AutoCAD 2012\ArxAppWiz\Templates\1033\StdAfx.h
或win7系统C:\Program Files(x86)\Autodesk\ObjectARX Wizards for AutoCAD 2012\ArxAppWiz\Templates\1033\StdAfx.h
找到定义winver那段
  1. //----- Modify the following defines if you have to target a platform prior to the ones specified below.
  2. //----- Refer to MSDN for the latest info on corresponding values for different platforms.
  3. #ifndef WINVER          //----- Allow use of features specific to Windows 95 and Windows NT 4 or later.
  4. #define WINVER 0x0400      //----- Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
  5. #endif
  6. #ifndef _WIN32_WINNT      //----- Allow use of features specific to Windows NT 4 or later.
  7. #define _WIN32_WINNT 0x0400    //----- Change this to the appropriate value to target Windows 2000 or later.
  8. #endif            
  9. #ifndef _WIN32_WINDOWS      //----- Allow use of features specific to Windows 98 or later.
  10. #define _WIN32_WINDOWS 0x0410  //----- Change this to the appropriate value to target Windows Me or later.
  11. #endif
  12. #ifndef _WIN32_IE        //----- Allow use of features specific to IE 4.0 or later.
  13. #define _WIN32_IE 0x0400    //----- Change this to the appropriate value to target IE 5.0 or later.
  14. #endif

替换成这段,不然v100会提示错误,更高版本也还要修改。以后再加上即可。
  1. #if _MSC_VER  1500 // vc9
  2. #ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later.
  3. #define WINVER 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
  4. #endif
  5. #ifndef _WIN32_WINNT // Allow use of features specific to Windows NT 4 or later.
  6. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
  7. #endif
  8. #ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
  9. #define _WIN32_WINDOWS 0x0501 // Change this to the appropriate value to target Windows Me or later.
  10. #endif
  11. #ifndef _WIN32_IE // Allow use of features specific to IE 4.0 or later.
  12. #define _WIN32_IE 0x0601 // Change this to the appropriate value to target IE 5.0 or later.
  13. #endif
  14. #else
  15. //- Modify the following defines if you have to target a platform prior to the ones specified below.
  16. //- Refer to MSDN for the latest info on corresponding values for different platforms.
  17. #ifndef WINVER          //- Allow use of features specific to Windows 95 and Windows NT 4 or later.
  18. #define WINVER 0x0400      //- Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
  19. #endif
  20. #ifndef _WIN32_WINNT      //- Allow use of features specific to Windows NT 4 or later.
  21. #define _WIN32_WINNT 0x0400    //- Change this to the appropriate value to target Windows 2000 or later.
  22. #endif            
  23. #ifndef _WIN32_WINDOWS      //- Allow use of features specific to Windows 98 or later.
  24. #define _WIN32_WINDOWS 0x0410  //- Change this to the appropriate value to target Windows Me or later.
  25. #endif
  26. #ifndef _WIN32_IE        //- Allow use of features specific to IE 4.0 or later.
  27. #define _WIN32_IE 0x0400    //- Change this to the appropriate value to target IE 5.0 or later.
  28. #endif
  29. #endif
回复

使用道具 举报

29

主题

743

帖子

11

银币

中流砥柱

Rank: 25

铜币
858
发表于 2017-12-11 16:04:00 | 显示全部楼层
更新一下default.js文件,有兴趣的可以试试。
自动添加R16~R19配置。
现在向导新建仅仅需要手动设置一下平台集即可。不过新建的时候会比较慢一点。default.rar
对于自动设置平台集,暂时无法实现,我觉得通过外部修改xml文件还来得更快。
回复

使用道具 举报

29

主题

743

帖子

11

银币

中流砥柱

Rank: 25

铜币
858
发表于 2017-12-15 15:30:00 | 显示全部楼层

不知道你说的是那一个人的,我偶尔进进空间。
回复

使用道具 举报

4

主题

73

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2017-12-11 08:54:00 | 显示全部楼层
e大牛逼,虽然看不懂,也玩不来arx
回复

使用道具 举报

28

主题

248

帖子

20

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
349
发表于 2017-12-11 09:59:00 | 显示全部楼层
先顶后看,一直想只有一个VS版本兼了其它所有版本,希望E大再出一个如何提取编择器的教程
回复

使用道具 举报

18

主题

113

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
184
发表于 2017-12-11 11:34:00 | 显示全部楼层
先顶后看,先看后试。
回复

使用道具 举报

28

主题

248

帖子

20

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
349
发表于 2017-12-11 14:25:00 | 显示全部楼层
我特别想知道VS2010怎么编译R20及以后的ARX,E大赶紧发下一 篇博文吧!
回复

使用道具 举报

28

主题

248

帖子

20

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
349
发表于 2017-12-12 15:32:00 | 显示全部楼层
E大,V120、V140的平台集在未装高版VS的情况下怎样添加?Daffodil.ENU只能增加到V100的平台集啊
回复

使用道具 举报

32

主题

268

帖子

10

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
396
发表于 2017-12-15 11:10:00 | 显示全部楼层
我好像在治地有访 王的 qq空间里看到你了
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 10:52 , Processed in 0.240470 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表