样例文件中的CustomDraw项目使用的是COM API,
但COM API不完整,某些时候需要使用.NET API,此时需要将C++项目设置成"公共语言运行时支持(/clr)"但简单的设置并不能实现项目的顺利编译,因此我试着使用ObjectARX Wizard向导创建.NET COM混合项目,之后把C3DCustomDarw样例中的代码移植到新建项目中。创建ObjectARX项目:
我自己汉化过的截面:
选择ObjectARX(AutoCAD扩展)
可能要用到MFC,所以选择共享MFC扩展DLL
我自己修改过的界面,
如果使用原生的向导,
这里可以选择"导入AutoCAD COM接口",之后在StdAfx.h文件中添加需要引用的Civil 3D相关的.tlb文件。例如:
选择.NET混合托管代码支持,
下面的AutoCAD Civil 3D也是我自己的向导中,后续可以手工添加引用的Dll文件。项目向导完成后,
首先编译一下,看是否能成功编译,因为导入tlb文件的原因,第一次生成旺旺不能成功,需要编译第二次。我刚还原的系统,VS安装有问题,就遇到了缺少windows sdk 8.1之类的问题。确保项目能顺利编译后再进行下一步的设置,以免众多问题交织到一起,导致问题难以解决。增加引用路径:
样例文件夹中的Inc文件夹:
C:\Program Files\Autodesk\Autodesk AutoCAD Civil 3D 2014\Sample\Civil 3D API\COM\VC++\CustomDraw\Inc
添加库目录
C:\Program Files\Autodesk\Autodesk AutoCAD Civil 3D 2014\Sample\Civil 3D API\COM\VC++\CustomDraw\Lib
这个目录2014版中是缺失的,需要自行下载,下载地址:http://adndevblog.typepad.com/infrastructure/2013/08/autocad-civil-3d-2014-and-custom-draw-api.html2016版之后是正常的,不需单独下载。添加附件依赖项
从样例文件的acrxEntryPoint.h文件中复制内容到项目的acrxEntryPoint.h。
上面截图中的代码有问题,过会儿再修改!
为了代码更清晰,
新建一个类,在头文件中添加方法如下:
注意这里我使用了static字段。
方法如何实现,过会儿再看!
添加另一个类,
注意这个类是托管类,这个类中将使用.NET API操作Civil 3D对象。添加简单的代码,
用.NET方法输出对象(这里的对象指的是路线)的句柄。回过头完善C3DCustomDraw.cpp的代码:
修改acrxEntryPoint.cpp中的错误:
记住需要引用头文件#include "AeccCustomDraw.h"#include "C3DCustomDraw.h"编译,加载,创建一条路线,程序将自动输出路线的句柄。
这是一个简单的测试,其中项目设置的步骤很容易出错,一不小心就可能掉进坑里,造成程序无法编译。