前面我们分享了AutoCAD二次开发环境c#搭建,引用了acmgd.dll、accoremgd.dll、acdbmgd.dll,很多人问我为什么要引用这个,有什么区别。
在C#中进行AutoCAD二次开发时,引用这三个DLL文件相当于给项目添加不同的“工具箱”。以下是通俗易懂的解释:
三个DLL的区别(用工具箱比喻)
1、acmgd.dll
作用:管理AutoCAD的“前台”操作(如界面、命令、文档窗口)。
包含什么:应用程序对象(Application)、文档对象(Document)、用户交互(如命令行提示)。
类比:像办公室的“前台接待员”,负责和用户直接互动。
作用:管理AutoCAD的“后台数据库”(图形数据、实体对象)。
包含什么:图形实体(直线、圆)、图层、块表(BlockTable)等底层数据操作。
类比:像仓库管理员,专门处理图纸的存储和结构。
作用:提供AutoCAD的“核心基础功能”(几何计算、公共接口)。
包含什么:数学计算、通用对象(如Point3d)、跨模块共享的功能。
类比:像公司的技术部,提供所有部门都需要的基础工具。
为什么需要分开?
模块化设计:各司其职,避免功能混杂(比如你只想操作图形数据时,不需要加载界面相关的代码)。
兼容性:新版AutoCAD(如2013+)将部分功能从acmgd移到了accoremgd,分离后更灵活。
减少依赖:如果只是处理图形数据,可能不需要引用acmgd(避免不必要的资源占用)。
如何正确引用?
添加引用
在Visual Studio中右键项目 → 添加引用 → 浏览到AutoCAD安装目录(如 C:\Program Files\Autodesk\AutoCAD 20XX) → 选择需要的DLL。
关键设置
Copy Local属性设为False:避免DLL被复制到输出目录,直接使用AutoCAD自带的版本。
(否则可能因版本冲突导致崩溃!)
典型引用场景
基本开发:同时引用acmgd.dll、acdbmgd.dll、accoremgd.dll。
纯数据库操作:可以只引用acdbmgd.dll和accoremgd.dll(无需界面交互时)。
常见问题
错误:“类型重复定义”
原因:同时引用了不同版本的DLL(如旧版acmgd和新版accoremgd)。
解决:确保所有DLL来自同一AutoCAD版本。
运行时崩溃
原因:未设置Copy Local=False,导致加载了错误的DLL副本。
解决:检查引用属性,确保禁用本地复制。
总结
acmgd.dll → 管界面和命令。
acdbmgd.dll → 管图形数据。
accoremgd.dll → 提供基础工具。
正确姿势:按需引用,设置Copy Local=False,保持版本一致。


评论