ObjectArx初学者必读

AutoCAD是国内使用比较广泛的CAD绘图软件包, 其R13(R14)版本运行于Windows95平台, 除了更高的执行效率、更友好的用户界面外,功能也有显著的增强,越来越多的工程设计人员开始使用。AutoCAD提供了很强的二次开发语言支持,如AutoLISP,ADS(AutoCAD Development System, 即AutoCAD开发系统,采用C语言编制开发程序), AutoCAD R13版本不仅支持ADS EXE程序,还支持ARX(AutoCAD Runtime eXtension)程序。ARX采用C/C++语言编制,为32位动态连接库(DLL), 在命令执行时动态调用,和ADS EXE程序相比, 可以节约系统的资源,提高运行效率。ARX程序在AutoCAD R13中应用广泛, AutoCAD系统许多模块也采用ARX编制。本文将介绍使用Microsoft Visual C++ 5.0编制ARX程序的方法。
1.采用DOS命令行编译ARX程序

  AutoCAD R13 ARX程序只支持32位Visual C++编译程序, AutoCAD软件提供的编译批处理文件和MAK文件在/R13/COM/ADSRX/SAMPLE目录下, 文件名分别为MKARX.BAT和MKARX.MAK, 这两个文件是为 VC++ 2.1, 2.2编写的, 如果使用VC++ 5.0需要对文件MKARX.BAT进行修改:


  SET MSVCPATH=C:/DevStudio/VC :: VC++5.0的安装路径
  SET ARXPATH=C/R13/COM/ADSRX :: AutoCAD ADSRX的路径
  SET ADSNC=C/R13/COM/ADS :: AutoCAD ADS的路径
  ::SET PATH=%msvcpath%

在VC路径设置语句前加’::’将其屏蔽, 在执行MKARX.BAT批处理命令前先执行VC++ 5.0的环境变量设置批处理命令C:/DevStudio/VC/BIN/VCVARS32.BAT。

  采用DOS命令行编译ARX时C语言源程序采用的扩展名为CC, 以区别普通的C或C++程序, 可以修改文件MKARX.MAK中的"EXT = CC "语句, 将源程序扩展名重新定义。

  对MKARX.BAT修改后,在DOS命令行执行命令
    MKARX 文件名(C语言源程序,不需要扩展名)
就可以编译连接ARX程序了。

2.采用集成编译环境IDE编制ARX程序

  可以在VC++ 5.0的集成编译环境IDE中定制ARX工程文件,然后编译连接,其过程和普通的Win32动态连接库的建立方法相同,不同的是设置必要的编译参数。


 1). 建立工程文件

  从下拉菜单“File”中选择“New”,在出现的对话框中选择“Project”,在列表框中选择“Win32 Dynamic-Link Library”,在“Project Name”编辑框中输入ARX工程文件名,并检查“Location”编辑框中的路径是否正确。如果一切正确,选择“Ok”建立新的工程文件。

  在工程文件中增加文件。从下拉菜单“Project”中选择“Add To Project”中的“Files...”,依次加入源程序文件(.CPP,注意在使用IDE编制ARX程序时,源程序的扩展名应使用C或CPP,而不能使用CC),定义文件(.DEF),资源文件(.RC)和库文件(.LIB)。ARX程序应包含ARX的两个库文件: ACAD.LIB和RXAPI.LIB,文件在目录/R13/COM/ADSRX/LIB中。

 2). 设置编译环境

  从下拉菜单“Project”中选择“Settings...”设置编译环境。在出现的设置对话框中,应该在“Settings for:”中选择设置对“Win32 Debud”和“Win32 Release”均有效。

  选择“C/C++”Tab按钮, 在“Category”中选择“General”,在定义“Preprocessor Definitions”中增加“,RADPACK,ACRXAPP”。 在“Category”中选择“Preprocessor”,在附加的包含文件路径“Additional Include Directories”中增加ADS和ARX的包含文件路径,如 “c:/r13/com/ads;c:/r13/com/adsrx/inc” 。

  选择“Link”Tab按钮, 在“Category”中选择“General”,在输出文件名“Output File Name”中输入ARX文件名并以ARX作为扩展名,否则连接后的文件名将以DLL为扩展名,在AutoCAD中调用不方便。在“Category”中选择“Output”,在基地址“Base Address”中输入“0X1C000000”, 在“Entry-Point Symbol”中输入“DllEntryPoint@12”,定义库的入口函数。

  至此, 编译环境设置完毕, 选择“Ok”退出设置。

 3). 建立ARX程序

  从下拉菜单“Build”中选择“Build XXX”,开始编译连接ARX程序。如果在连接中出现变量重复定义的错误, 可以将当前活动配置改为“Win32 Release” 后再建立。改动方法为:

  从下拉菜单“Build”中选择“Set Active Configuration...”, 在设置对话框中选择“Win32 Release”后确认。

3. ARX源程序的组成

 1). 定义文件(.DEF)

  ARX程序由C/C++源程序文件和定义文件(.DEF)组成, 也允许包含资源文件(.RC),但ARX程序并不要求必须包含RC文件(注意和R12 WINADS的区别)。定义文件中包含了ARX程序的名称及调用的外部函数,每一个ARX程序必须有定义文件。定义文件的内容如下:

  LIBRARY EX.ARX ;ARX程序名称
  DESCRIPTION 'Autodesk Arx ADS Program' ;ARX程序描述
  EXPORTS ;引用的外部函数, 以下三项内容必须有
   acrxEntryPoint
   _SetacrxPtp
   acrxGetApiVersion 

2). C/C++源程序

  ARX源程序和ADS源程序的结构相同, 只是增加了包含文件和改变了程序的入口函数。在源程序中应包括ARX和ADS的包含文件:

  #include "rxdefs.h"
  #include "adslib.h"

使用以下代码替换ADS源程序的入口函数main:

  extern "C" {
    AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg,void * pkt);
  }

  AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* ptr)
  {
   switch(msg) {
    case AcRx::kInitAppMsg:
     acrxUnlockApplication(ptr);
     break;
    case AcRx::kInvkSubrMsg:
     dofun();
     break;
    case AcRx::kLoadADSMsg:
     funcload();
     break;
    case AcRx::kUnloadADSMsg:
     funcunload();
     ads_printf("Unloading.");
     break;
    case AcRx::kUnloadAppMsg:
     default: break;
    }
   return AcRx::kRetOK;
  }

  以上代码可以在/R13/COM/ADSRX/SAMPLE目录中的ARX示例程序(如FACT.CC)中找到。

4.在ARX程序中使用Windows资源

  在ARX程序中使用Windows(包括Windows 95)资源,可以减少开发工作量,提供更友好的工作界面。特别是和AutoCAD对话框DCL相比,Windows对话框具有编制方便、执行效率高而文件数少、丰富灵活的控制方法等优点。但在AutoCAD R13提供的帮助文件和示例程序中,都未提到在ARX程序中使用Windows对话框的方法,下面介绍笔者摸索出来的方法。

 1). 包含Windows头文件

  在源程序中必须包含Windows头文件WINDOWS.H。但要注意, 由于ADS头文件ADS.H(由ADSLIB.H调用)和WINUSER.H中都定义了X,Y而且定义不同, 为了避免编译错误, 必须先包含WINDOWS.H, 后包含ARX的头文件, 即包含头文件的顺序为:

  #include //先包含WINDOWS.H
  #include "rxdefs.h" //后包含ARX的头文件
  #include "adslib.h"

 2). 建立对话框处理过程

  ARX程序中的对话框处理过程和Windows程序中的对话框过程相同,其代码为:

  //对话框处理示例
  LRESULT WINAPI ExDlg(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
  {
   switch(msg) {
    case WM_INITDIALOG:
     return(FALSE);
    case WM_COMMAND:
     switch(LOWORD(wParam)) {
      case 101:
       EndDialog(hDlg,FALSE); return(FALSE); }
   }
   return(FALSE);
  }

  注意WIN32和16位Windows程序中处理WM_COMMAND消息的区别。

 3). 建立对话框过程

  在Windows程序中创建一个对话框过程通常调用函数DialogBox,其函数原型为:

  int DialogBox(hInstance,lpTempName,hWndParent,lpDlgFunc)

  各参数的含义如下:
  hInstance 模块的实例句柄
  lpTempName 对话框名称,在资源文件中定义
  hWndParent 拥有对话框的父窗口句柄
  lpDlgFunc 对话框处理过程函数

  从DialogBox的参数中可以看出, 对话框名称和处理函数已经具备,可以直接引用,父窗口句柄可以设置为NULL, 关键在于模块实例句柄的确定(实例句柄不能设置为NULL, 否则对话框不会显示)。在常规的WIN32动态连接库(DLL)设计中,可以选取DLL的句柄作为实例句柄,该句柄可以从DLL的入口函数DllMain中获得。但是对于ARX程序, 其入口函数由AutoCAD定义,并且在定义文件中没有完整的类的说明, 所以实例句柄不能直接从入口函数中获取。

  经过笔者摸索, 我发现可以采取以下方法获取实例句柄, 即通过获取ARX程序模块的实例句柄作为创建对话框的实例句柄。具体实现代码如下:
  HANDLE hInst; //定义实例句柄变量
  BOOL rc; //对话框执行返回结果
  ... ...
  hInst=GetModuleHandle("EX.ARX"); //获取ARX模块的句柄, 将其中
  //的EX.ARX设置为当前ARX程序名
  rc=DialogBox(hInst,"EX",NULL,(DLGPROC)ExDlg); //创建对话框
  ..... //其他处理过程

  使用以上方法编制的ARX程序在AutoCAD中运行正常。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ObjectARX(Autodesk Runtime Extension)是Autodesk公司开发的一种用于编写AutoCAD和AutoCAD衍生软件的应用程序编程接口(API)。它允许开发人员通过使用C++编程语言和AutoCAD提供的功能来创建自定义的功能和工具。 ObjectARX提供了广泛的功能,使开发人员可以轻松地访问和操作AutoCAD文件中的对象和数据。开发人员可以创建自定义的命令和功能,通过菜单、工具栏或命令行调用并与AutoCAD进行交互。还可以使用ObjectARX创建自定义的对象和实体,并对它们进行编辑和修改。 通过ObjectARX,开发人员还可以访问AutoCAD的各种功能和服务,包括图形显示、图层管理、块定义、属性和数据提取等。这使得开发人员可以构建功能强大的应用程序,扩展AutoCAD的功能并提高设计和绘图效率。 ObjectARX电子书是一种电子书籍,用于指导开发人员如何使用ObjectARX进行AutoCAD开发。这些电子书通常包含有关ObjectARX的详细信息和示例代码,以帮助开发人员掌握ObjectARX编程技巧和最佳实践。开发人员可以通过阅读这些电子书,了解ObjectARX的概念和用法,并学习如何应用它来创建自定义的AutoCAD应用程序。 总之,ObjectARX是一种用于编写AutoCAD和AutoCAD衍生软件的API,它提供了丰富的功能和服务,可以通过编程方式访问和操作AutoCAD文件中的对象和数据。ObjectARX电子书则是提供给开发人员的辅助材料,以帮助他们学习和应用ObjectARX编程。 ### 回答2: ObjectARX是为AutoCAD软件开发插件和自定义应用程序的一种编程接口。它允许开发者使用C++语言来创建诸如工具栏、菜单、命令、实体、绘图对象等功能,从而扩展和增强AutoCAD的功能和性能。ObjectARX是基于面向对象的编程理念构建的,它提供了广泛的类库和函数,以及丰富的开发文档和示例。同时,ObjectARX可以与其他Autodesk产品(如AutoCAD Mechanical、AutoCAD Civil 3D等)进行集成开发,实现跨软件平台的应用程序。 ObjectARX电子书是一种提供关于ObjectARX编程接口的电子书籍。它通常包含了ObjectARX的入门介绍、编程指导、开发技巧、实例代码等内容。ObjectARX电子书可以帮助开发者快速了解和掌握ObjectARX的使用方法和技术,并且可以作为参考资料在实际开发过程中查询和学习。 通过阅读ObjectARX电子书,开发者可以学习如何利用ObjectARX接口进行自定义应用程序的开发,从而实现更加强大和个性化的AutoCAD软件功能。ObjectARX电子书提供了丰富的示例代码,可以帮助开发者快速上手,并且了解和掌握ObjectARX的核心概念和编程技术。 总之,ObjectARX电子书是一种便捷的学习工具,可以帮助开发者深入学习和应用ObjectARX编程接口,以实现更加高效和创新的AutoCAD自定义应用程序。 ### 回答3: ObjectARX是由AutoCAD提供的一个编程接口,用于开发AutoCAD的定制应用程序。它是一种强大的工具,可以允许开发人员通过编写ObjectARX代码来扩展和定制AutoCAD的功能。它提供了与AutoCAD内部对象交互的能力,可以创建和修改图形元素、添加自定义命令、实现自定义绘图功能等。 ObjectARX电子书是为了帮助开发者更好地学习和应用ObjectARX而创建的一种资源。它通常包含有关ObjectARX编程的理论知识、实用技巧和示例代码等内容。 ObjectARX电子书可以帮助开发者了解ObjectARX的核心概念和基本用法,通过详细的讲解和示例代码,开发者可以学习如何使用ObjectARX来创建自定义的AutoCAD应用程序。它可以覆盖ObjectARX的各个方面,包括对象操作、图元绘制、用户界面开发、数据交互等。 通过学习ObjectARX电子书,开发者可以掌握使用ObjectARX进行AutoCAD应用程序开发的技能,从而能够根据实际需求对AutoCAD进行定制和扩展ObjectARX电子书还可以帮助开发者解决实际开发过程中遇到的问题,提高开发效率和质量。 总之,ObjectARX电子书是一种有助于开发者学习和应用ObjectARX编程接口的资源,通过学习它可以帮助开发者掌握AutoCAD应用程序的开发技能,并且能够进行定制和扩展

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值