CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

使用 Microsoft Visual Studio 设置 ObjectARX 项目

2023-1-1 07:42| 发布者: admin| 查看: 414| 评论: 0|来自: AutoCAD

构建 ObjectARX 应用程序的第一步是在 Microsoft Visual Studio 中设置一个项目。本节列出了构建基本 ObjectARX 应用程序所需的项目设置和最少文件数。

或者,您可以使用 ObjectARX Wizards for AutoCAD 创建一个新的 ObjectARX 项目,您可以从 ObjectARXutils\ObjARXWiz目录中安装该项目。
注意:ObjectARX 向导已从 ObjectARX SDK 中删除。您可以在 AutoCAD 开发人员中心找到最新版本。

对项目使用以下设置

  • 将应用程序类型设置为 DLL。
  • 指定 ObjectARX 库并包括文件位置。

    执行此操作的最简单方法是将 ObjectARX 包含和库目录添加到 MSVC++ 环境设置中(在 Microsoft Visual Studio 菜单中的“工具选项项目和解决方案VC++ 目录”下)。您还可以在项目属性中指定位置,但需要包含您创建的每个项目的文件的完整路径。

  • 对于所有配置(调试和发布),请设置用于链接到多线程 DLL 的运行时库(在项目属性页的“配置属性”文件夹C/C++ 文件夹“代码生成运行时库”下)。
  • 对于所有配置(调试和发布),将“检测 64 位可移植性问题”选项设置为“否”(在项目的“属性页”中的“配置属性”C/C++文件夹“常规检测 64 位可移植性问题”下)。此设置禁止对不兼容 64 位的指针分配显示编译器警告 4311。某些 ObjectARX 头文件包含此类赋值。

    如果您愿意,可以改为使用 using 语句来控制此警告。有关语句的详细信息,请参阅 Microsoft 文档。#pragma warning#pragma warning

  • 将输出文件名(在项目的“属性页”中的“配置属性链接器常规输出文件”下)设置为扩展名为 .arx的名称。如果在项目中包含带有 LIBRARY 语句的 DEF 文件,则此名称应与 LIBRARY 值匹配。
    注意:LIBRARY 语句在 DEF 文件中是可选的。
  • 添加程序所需的 ObjectARX 库(在项目的“配置属性”链接器输入“其他依赖项”下的“属性页”中)。

    例如,下面显示的最低代码需要rxapi.libacdb24.lib

您需要将源文件添加到新项目中。如果已有源文件或正在使用示例程序源文件,请添加这些文件。

此示例显示了制作 ObjectARX 程序所需的最少代码。

将新的C++源文件添加到项目中,然后输入以下代码:

#include "rxregsvc.h"
#include "acutads.h"
// Simple acrxEntryPoint code. Normally intialization and cleanup
// (such as registering and removing commands) should be done here.
//
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
{
    switch(msg) {
    case AcRx::kInitAppMsg:
        // Allow application to be unloaded
        // Without this statement, AutoCAD will
        // not allow the application to be unloaded
        // except on AutoCAD exit.
        //
        acrxUnlockApplication(appId);
        // Register application as MDI aware. 
        // Without this statement, AutoCAD will
        // switch to SDI mode when loading the
        // application.
        //
        acrxRegisterAppMDIAware(appId);
        acutPrintf("\nExample Application Loaded");
    break;
    case AcRx::kUnloadAppMsg:
        acutPrintf("\nExample Application Unloaded");
    break;
    }
    return AcRx::kRetOK;
}

项目还需要一个定义文件。向项目添加新的文本文件,并使用 .def扩展名命名。

在 DEF 文件中输入以下代码

LIBRARY "objectarx_program_name.arx"
EXPORTS
    acrxEntryPoint PRIVATE
    acrxGetApiVersion PRIVATE

EXPORTS 部分应该存在,并且必须至少包含函数(除非您使用其他机制导出此函数,如 Windows约定)。acrxEntryPoint_declspec(dllexport)

在 DEF 文件中使用 PRIVATE 可防止这些符号出现在此 ObjectARX 应用程序的导入库中。该符号仍将显示在应用程序的导出表中,允许 AutoCAD 查找并调用该符号。这一点很重要,因为每个 ObjectARX 应用程序或对象启用程序都必须有自己的这些功能实现。应用程序通过链接到静态库rxapi.lib 来获取实现。如果 ObjectARX 应用程序 app2 通过链接到app1.lib 来使用 ObjectARX 应用程序 app1 中的符号,则 app2 从 app1 导入库中获取其定义将是一个错误。在 DEF 文件中使用 PRIVATE 将防止这种情况。在链接到另一个 ObjectARX 应用程序的任何导入库之前,确保链接到rxapi.lib也可以防止这种情况。acrxGetApiVersionacrxGetApiVersion

库名称应与要创建的 ObjectARX 文件的文件名匹配,并且必须显示 .arx扩展名。例如,如果所需的输出文件名是test.arx,则 DEF 文件中的 LIBRARY 语句应显示全名test.arx

注意:如果您愿意,可以在项目中包含标准的 ObjectARX DEF 文件 AcRxDefault.def。此文件正确定义了所需的 ObjectARX 导出,可在 \incSDK 目录中找到。它不使用 LIBRARY 语句。

添加这两个源文件后,可以构建基本的 ObjectARX 应用程序。

要测试应用程序,请启动 AutoCAD 并使用以下方法之一加载程序

  • 使用 AutoLISP函数。arxload
    (arxload "program_name")
  • 使用 ARX 命令。
  • 使用 APPLOAD 命令,该命令将打开一个对话框,允许您维护要加载/卸载的应用程序列表。

有关更多信息,请参阅加载 ObjectARX 应用程序


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 13:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部