DLL在AutoCAD开发中的应用

上传人:gg****m 文档编号:213903570 上传时间:2021-11-22 格式:DOCX 页数:4 大小:99.82KB
返回 下载 相关 举报
DLL在AutoCAD开发中的应用_第1页
第1页 / 共4页
DLL在AutoCAD开发中的应用_第2页
第2页 / 共4页
DLL在AutoCAD开发中的应用_第3页
第3页 / 共4页
DLL在AutoCAD开发中的应用_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《DLL在AutoCAD开发中的应用》由会员分享,可在线阅读,更多相关《DLL在AutoCAD开发中的应用(4页珍藏版)》请在金锄头文库上搜索。

1、DLL在AutoCAD开发中的应用XX(犬津市测绘院)摘要:本文介绍了动态链接库在AutoCAD二次开发中的应用。同时讨论了 AutoCAD二次开 发软件系统的管理与保密方法。关键词:AutoCAD DLL一、引言目前AutoCAD的二次开发工具主要包 括:ARX、VB/VBA. AutoLTSP/VisualLTSP 以及AutoDesk最新推出的.NET API。儿种 开发语言各有各的优点。其中AutoLISP是 AutoCAD在早期的版本中就引入的脚本语 言。语法简单、调试方便,运行风险小、程 序安全性高,它在编写专业CAD程序方面具 有很大的优势。VBA是AutoCAD从2000版本

2、开始集成的开发环境,具有丰富的开发能 力,但它偏重于面向对象处理,在与AutoCAD 交互响应和集成方面明显不足。VBA的一个 重要的特点是可以很容易地使用Windows系 统资源,使AutoCAD能更容易地与其他 Windows下用应用软件交互。VBA的面向对 象的特点使我们的开发方式更加多样化了。 在目前的AutoCAD的二次开发中,我们可以 综合运川多种开发手段,发挥各自的优势, 使软件的功能更高效。在这些开发语言当 中,VBA的代码保密性最差,但我们可以用 VB或英它编译器将一些重要系统函数编译 成DLL来供VisualLISP调用,这样做到了 代码保密,也极大地丰富了 VisualL

3、ISP的 功能。二、VB ActiveX DLL1、常规函数调用用VB编写DLL供VisualLISP调用的 方法比较简单,方法如下: 第一步:启动 Visual Basic 6.0; 第二步:在新建工程中选择ActiveX DLL”; 第三步:在Classi模块中添加以下测试函 数:Public Sub Hello()MsgBox “HelloEnd SubPublic Function Sum(ByVal a As Double, ByVai b As Double) As DoubleMySum = a + bEnd Function其中“Hello”是类模块的方法,“Sum”是 求和函

4、数,即返回参数a和b的和。第四步:编译工程为Projectl.dll。第兀步:在VisualLISP中调用该动态库。 (dcfun c:tcst (/ obj sum)(vlax-import-type-library:tlb-filename c:Projectl .dll:methods-prefix nmsw-H:properties-prefix Mmsw-U:constants-prcfix nmswc-n)(setq obj (vlax-create-objectProject 1.Classi);调用Hello方法(vlax-invoke-method obj Hello);调用

5、Sum函数(setq sum (vlax-invoke obj Sum 3.0 5.0)运行的结果为:由Hello方法弹出信息框:然后Sum函数的返回值8.0打印在 AutoCAD命令行。2、对话框调用如果要通过这种方法调用对话框是不是也可以呢?当然可以。方法如下:首先,在VB T程Project 1中添加一个窗体 Forml,然后在类模块Classi中添加函数: Public Sub ShowDlgl()Form 1.ShowEnd SubPublic Sub ShowDlg2()Form 1. Show 1End Sub重新编译后,在VisualLISP中调用 显示窗体函数:(vlax-i

6、nvoke-method obj ShowDlgl)和(vlax-invoke-method obj ShowDlg2)结果为:需耍注意的-点是,函数ShowDlgl显示得 窗体不是模态窗体,并口在状态栏显示最小 化窗口,如下图所示:AutoCAD 2004-.已 Forml而使用函数ShowDlg2,显示的窗体显示的 是模态窗体,与AutoCAD中一般的对话框 没多大区别,这样的结果正是我们需耍的。3、ActiveX对象操作我们讨论的落脚点还要归结到如何进 行ActiveX对象操作o AutoCAD对象模型如卜图:Applicatio nPreferences)DocumentDocumen

7、ts以前使用VB开发AutoCAD时通常使用GctObjcct 或 CrcatcObjcct 方法:Set acadApp =GetObject(,AutoCAD.Application. 16n) 或Set acadApp =CreateObject(H AutoCAD. Application6) 这样做的一个明显的缺点就是当我们同时 打开多个AutoCAD实例时,GetObject方法 不能区分不同的实例,仅能取得最先打开的 一个。显然,我们在DLL中不能这么做, 因为谁都不想在当前AutoCAD实例中调用 的程序却在别的AutoCAD窗口执行。在前面我们看到,VisualLISP调用的

8、 DLL可以返回值,也可以传入值。想要使 VisualLISP调用的DLL程序在当前 AutoCAD W口执行,我们町以将AutoCAD 对彖通过VisualLISP传给DLL,然后其它 的处理操作就交由DLL取完成。实现的步 骤为:第一步:在DLL的“工程”- “引用” 中添加 “AutoCAD 2004Type Library” 类型 库。第二步:在工程中添加全局模块 Module 1,并声明一个全局变量:Public acadApp AsAutoCAD.AcadApplication第三步:VisualLISP与DLL通信的函 数为:Public Sub GetAcad(ByVal ap

9、p As AutoCAD.AcadApplication)Set acadApp = appEnd SubPublic Sub ReleaseAcad()Set acadApp = NothingEnd SubPublic Sub MyAlcrt(ByVal mes As String) Dim doc As AutoCAD.AcadDocument Set doc = acadApp.ActiveDocument doc.SendCommand u(alert + Chr(34) + mes + Chr(34) + “)” + vbCrEnd Sub其中GetAcad用來获得从VisualL

10、ISP传 进来的AutoCAD应用程序对彖; ReleaseAcad用来释放对象;MyAlert是用来 测试的函数。第四步:在VisualLISP中的调用方法 为:;传递AutoCAD对象到DLL(vlax-invoke-method obj fGetAcad(vlax-gct-acad-objcct);发送消息(vlax-invoke-method obj MyAlert 你好);解放对象(vlax-invoke-method obj ReleaseAcad)4、小结在以后的AutoCAD二次开发中,如果 用ActiveX编程,就可以采用VisualLISP与 VB ActiveX DLL相

11、结合的方式。这样可以 使AutoCAD从Windows系统得到更多的支 持,增加程序的灵活性,同时也做到了对代 码的保护。三、VB.NET DLL1、NET API.NET是微软新推出的开发平台, Autodesk在AutoCAD2006及以后版木中增 加了 .NET API o.NET API提供了 一系列托管 的外包类(Managed Wrapper Class),使开 发人员可在.NET框架下,使用任何支 持.NET 的语言,女UVB.NET、C#和 Managed C卄等対AutoCAD进行二次开发。2、VB.NET DLL在VisualLISP与DLL协同开发的同时, 如果要使用.N

12、ET API的强大功能,我们需要 使用.NET生成DLL,以VB. NET为例。第一步:新建VB. NET类库工程 ClassLibrarylo第二步:设置工程属性,选中“编译” 页的“为COM Interop注册”项。第三步:添加测试函数:Public Class ClassiPublic Function Sum (ByVai a As Double, ByVai b As Double) As DoubleSum = a + bEnd FunctionEnd Class第四步:编译工程,牛成动态库 ClassLibraryl. dll。在VisualLISP中调用方法与前面调用 VB A

13、ctiveX DLL的方法稍有不同:(setq app (vlaxget-acad-object) (setq vbnet(vla-getinterfaceobject app z/ClassLibraryl. Classi)(setq val (vlax-invoko vbnet Sum 3.0 5. 0)返回值为&0。如果需要将动态库应用到没有安装 VS. NET开发环境的Windows系统时,系统需 要安装 Microsoft. NET Framework,还需耍 用Framework中的regasm. exe工具注册 ClassLibraryl. dll,注册方法为:regasm. e

14、xe ClassLibraryl. dll /tlb四、DLL管理Toolbar图标资源原来做个工具条给其它用户使用吋总 要附带拷贝好多bmp图标,显得很零乱。 VB ActiveX DLL 个重要的川途就是可以 作为AutoCAD工具条图片资源的容器。这 样创建的工具条只需要两个文件就可以了, 即一个mnu菜单文件和一个资源dll文件。 如何创建这样的工具条呢?首先建立一个 test.mnu文件,格式如卜: *MENUGROUP=MyMenu*T00LBARS*MY_TOOLBAR_MA1N 1D_TBJLA1N Toolbar(我 的 工具条”、Floating, Show, 100, 1

15、00, 1) TO TB 1 Button C 按钮1,BTN1,BTN1)CC_CMD1 1D_TB_2 Button (按 钮1,BTN2,,BTN2,)CC_CMD2 然后用VB建立一个ActiveX Dll工程,从菜单 rtAdd-Ins-Add Tn Manager.打开资源编辑器, 导入按钮图片,然后重新命名图片与菜单文件中使 用的图片名称对应。VB Resource Editor -口 3Resource File 日Bi tmapBTN注意的是mrrn与dll文件名称必须相同。拷 贝两个文件到AutoCAD搜索路径中,在 AutoCAD命令行输入menu load命令导入mnu结束语:在AutoCAD二次开发中,使用DLL不仅対我们的程序起到了一定的代码保护作用, 而口可以有效的组织和管理我们的软件。在做到代码重用的同时,在一定程度上也会提高程 序执行的效率。参考文献:1陈伯雄 冯伟.VisualLISP程序设计一-技巧与范例北京:人民邮

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号