01 Hello world

acedGetString 函数 如果用户输入超过 133 个字符,输入会继续直到用户输入了空格或者 [Return](根据 cronly 参数的设置),但 acedGetString 只会将前 133 个字符存储到 result 中。如果用户输入的字符数超过 133 个,输入会持续进行,直到用户输入了空格或者 [Return](根据 cronly 参数的设置)。综合以上信息,acedGetString 函数的作用是获取用户输入的字符串,可以根据需要进行相应的处理,并且支持各种情况下的输入限制和提示。 阅读详情

原文转载自:CAD ObjectARX二次开发之HelloWorld手动创建 - 百年一梦 - 博客园

CAD ObjectARX二次开发之HelloWorld手动创建 

 


Top

一、新建类库【HelloWorld手动创建】项目

Top

二、导入Arx的相关库依赖

1、附件包含目录:即ObjectARX SDK的解压包的头文件目录

D:\Autodesk\Autodesk_ObjectARX\ObjectARX 2010\inc

D:\Autodesk\Autodesk_ObjectARX\ObjectARX 2010\inc-x64

2、附加库目录:即ObjectARX SDK的解压包的lib文件目录,根据需要导入64位或者32位

D:\Autodesk\Autodesk_ObjectARX\ObjectARX 2010\lib-x64

3、附加依赖项:开发需要的常用连接库,可根据需要自行添加。
rxapi.lib
acdb18.lib
acge18.lib
acad.lib
acedapi.lib

1、修改编译目标平台为X64

2、添加附加包含目录

3、添加附加库目录

4、添加附加依赖项

注意点击应用和保存,检查确认是否配置成功!

Top

三、编写代码

1、注释掉默认生成的类头文件中using namespace System或者直接删除头文件。

不处理则会报如下错误:

2、编写代码如下:

// 这是主 DLL 文件。

#include "stdafx.h"
#include "tchar.h"
#include <aced.h>
#include <rxregsvc.h>

//函数声明
void HelloWorld();

//注册命令,初始化应用
void initApp(){
	//命令注册
	//cmdGroupName:命令组名, cmdGlobalName:全局命令名, cmdLocalName:本地命令名, commandFlags:命令标记, FunctionAddr:命令执行函数, UIContext:UI
	acedRegCmds->addCommand(_T("HELLOWORLD_COMMANDS"), _T("Hello"),_T("HelloDemo"), ACRX_CMD_TRANSPARENT,HelloWorld);
}
//移除命令,卸载应用
void unloadApp(){
	acedRegCmds->removeGroup(_T("HELLOWORLD_COMMANDS"));
}
//命令执行函数
void HelloWorld(){
	acutPrintf(_T("\nHello World + Hello World"));
}
//外部函数,通过此函数接受CAD消息,进行初始化加载
extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg,void* pkt)
{
	switch(msg)
	{

	case AcRx::kInitAppMsg://App插件初始化消息
		{
			initApp();
			break;
		}
	case AcRx::kUnloadAppMsg://App插件卸载消息
		{
			unloadApp();
			break;
		}
	default:
		break;
	}
	return AcRx::kRetOK;
}


3、在源文件目录下添加模板定义文件

LIBRARY	"Demo_HelloWorld1"
EXPORTS
acrxEntryPoint PRIVATE
acrxGetApiVersion PRIVATE
Top

四、编译测试

1、修改生成文件格式为arx, 编译

说明:CAD的arx文件本质就是DLL动态库文件

2、打开CAD加载运行

执行HeelloDemo命令,显示打印结果

第二篇文章

ARX开发的方式是,将自己的函数注册给库,指定调用命令就完成了。

CAD加载我们的程序后,用你事先指定的命令,就可以调用对应的函数了。

重点来了,在创建我们自己的函数之前,我们先学习模板里预留给我们的函数。

在acrxEntryPoint.cpp 77行左右,你应该能看到这个函数

	static void ADSKMyGroupMyCommand () {
		// Put your command code here
	}

这就是一个可以被注册为CAD指令的函数。

函数名其实是两部分组成的,前半段为ADSKMyGroup,后半段为MyCommand。

前半段的意义类似于名字空间,默认是你的RDS符号+MyGroup,实际上可以是任何合法的字符

后半段才是真正的函数名,是你想给函数取的名字。

比如你可以取一个函数名为 static void CloudTestInput(){ }

请注意,修辞是static,返回值是void,参数为空,都是固定的,不能变。

虽然现在函数内部是空的,没有关系,最后一步再来写函数内容,先看文件最下面,找到这一句

ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, ADSKMyGroup, MyCommand, MyCommandLocal, ACRX_CMD_MODAL, NULL)

这是将函数注册为CAD指令的方法。

一共有6个参数。

参数1:程序标识符,使用默认值

参数2:注册函数的前半段名字,也就是刚才说的名字空间

参数3:注册函数的后半段名字,真正意义的函数名

参数3:CAD指令。这是你创建的CAD指令,当在CAD中输入这条指令时就会调用对应的函数。

参数4:模式,暂时使用默认值。

参数5:默认NULL

生成程序,会得到一个后缀为ARX的文件,这就是我们的CAD插件。不过现在这个插件没有任何功能。

我们现在来写函数内容,让这个插件拥有接收用户输入的功能。

注意,ARX要求生成过程中0警告0错误,哪怕有一个警告也会阻止生成成功。

所以,拿出强迫症精神,做ARX开发,一个警告都不能有。

我们给刚才的函数内部添加如下内容:

	static void ADSKMyGroupMyCommand() {

		wchar_t temp[32];
		wmemset(temp, 0, 32);

		acutPrintf(_T("这是我的第一个ARX插件\n"));		//输出
		acedGetString(0,_T("请问你的名字是:"),temp);	//输入
		acutPrintf(_T("你好,%s\n"),temp);		//输出
	}

  

简介一下acedGetString函数,这是接受输入的函数,有很多重载方式,当前使用的方式有三个参数。

参数1:若为0,空格和回车都会使字符串输入结束,若非0,空格不会使字符串输入结束,需要回车才会结束。

参数2:输出字符串的部分

参数3,接收字符串的缓存

生成新的ARX吧,然后依照第三节的内容加载ARX并且执行这条指令。

指令是你自己创建的,本例中为 MyCommandLocal。

执行效果如下:

你可以依照上面的格式,自己在acrxEntryPoint.cpp文件的类中添加新的函数

然后添加一条新的注册指令。

就像这样

	static void BIMCloudHello() {

		wchar_t temp[32];
		wmemset(temp, 0, 32);

		acutPrintf(_T("这是我的第一个ARX插件\n"));		//输出
		acedGetString(0,_T("请问你的名字是:"),temp);	//输入
		acutPrintf(_T("你好,%s\n"),temp);			//输出
	}



ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, BIMCloud, Hello, myhello, ACRX_CMD_MODAL, NULL)

  

然后在CAD中执行myhello指令,就可以调用这个函数了。记得,新函数要添加在acrxEntryPoint文件的类当中,作为一个类成员函数。

你应该已经注意到,整个过程中没有添加任何头文件,

因为创建模板的时候,ARX向导已经帮我们添加好了,所以非常方便,直接就可以写业务逻辑了。

但是你用到Unicode字符的话,就需要自己添加

#include "tchar.h"

CAD_VC++二次开发 AutoCAD是目前微机上应用最为广泛的通用交互式计算机辅助绘图与设计软件包。AutoCAD的强大生命力在于它的通用性、多种工业标准和开放的体系结构。其通用性使得它在机械、电子、航空、船舶、建筑、服装等领域得到了极为广泛的应用。但是,不同的行业标准使得各领域在使用AutoCAD的过程中均需根据自身特点进行定制或开发。Autodesk公司为满足广大用户的需求,自AutoCAD v2.18版至AutoCAD 2000的短短十几年间,就相继推出了三代二次开发工具. 立即下载

相关推荐

objectarx wizard 2012配置与helloworld

我自己给师弟们写的指导文档,经测试完全可以(附objectarx2012与arxwizard2012下载地址)

acedGetString获取用户输入字符串

acedGetString()[ads_getstring()]int acedGetString(int cronly, const TCHAR *prompt, TCHAR *psz) acedGetString()函数暂停程序运行以等待用户输入一个字符串,其定义如下: 该函数使result指向用户输入的字符串。参数cronly说明字符串能否包含空格。prompt参数指定acedGetSt...

weixin_30387799的博客 1301

详解ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008+ObjectArx2008)

主要介绍了ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008+ObjectArx2008),本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

ObjectArx学习笔记-acedGetXXX

acedGetInt函数暂停程序执行,等待用户输入一个整数。该函数定义为: int acedGetInt(const char * prompt, int * result); prompt用于指定显示在命令窗口中的字符串,如果不需要使用可以指定NULL作为该参数的值。 acedGetReal函数暂停程序执行,等待用户输入一个实数。 acedGetSt...

weixin_33739523的博客 713

【软碟通 | UltraISO】刻录光盘教程(制作U盘启动盘)

前言 今天老师说办公室的电脑有点卡,让我给重新安装一个 Windows 7 系统。于是就用软碟通(UltraISO)在 U 盘上刻录了一个 Windows 7 镜像,然后给老师重装了系统。顺便把制作 U 盘启动盘的教程也分享给大家。 软件 UltraISO v9.7.1.3519:点击跳转(密码:dd2k) 教程 将 U 盘插到电脑上,然后鼠标右击选择格式化(制作启动盘必须格式化) 点击文件-打开 选择下载好的系统镜像(如:Windows 7) 点击启动-写入硬盘映像 选择硬盘

XavierJ的博客 2万+

ITK-snap医学图像标注方法(超级详细)——保姆级

医学3D图像标注方法,非常详细,保姆级

jialiyk的博客 3万+

ObjectArx学习笔记

ObjectArx学习笔记函数ACED_ARXCOMMAND_ENTRY_AUTO功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 函数 ACED_ARXCOMMAND_ENTRY_AUTO 这是将函数名注册为CAD指令的方法,其原

Android开发者 970

Bulk / Smart-seq2数据分析一般流程

Bulk RNA-seq(RNA-Seq of bulk samples)是一种RNA-Seq技术应用,它是通过将整个组织或细胞群体的RNA提取并混合,进行高通量测序来分析基因表达的技术。转录本定量结果可以用于后续的差异表达分析和聚类分析。功能注释和富集分析:对差异表达基因进行功能注释和富集分析,以帮助理解差异表达基因的功能和调控网络,从而获得对研究样品的更深入的理解。数据可视化:最后,将聚类分析的结果进行可视化,可以使用常见的数据可视化工具,如ggplot2、Plotly等,来帮助用户更好地理解数据。

weixin_54519672的博客 5350

【01】react 之 hello world

React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。由于React的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单。所以,越来越多的人开始关注和使用,认为它可能是将来Web开发的主流工...

banpian5203的博客 140

基于Codex/Claude Code的学术技能包:13个Skill实现科研全流程自动化

写论文最头疼的是什么?是面对海量文献无从下手,还是实验数据一团乱麻,或者是好不容易有了结果,却卡在写作和格式调整上?如果你也经历过从选题到投稿的完整科研周期,就会明白每个环节都可能消耗大量时间精力。今天要分享的这套工具链,正是为了解决这些痛点而生——基于 Codex 和 Claude Code 平台的学术技能包(Academic Skills),它通过 13 个精心设计的 Skill,将一篇论文从 0 到 1 的全流程自动化、标准化,让你能更专注于研究本身。 这套技能包并非单一工具,而是一个覆盖文献阅读、数

weixin_33979203的博客 544

Frigate进阶玩法:如何用MQTT和Python脚本扩展你的自定义目标检测算法

本文详细介绍了如何通过MQTT和Python脚本扩展Frigate的自定义目标检测算法,无需修改源码即可实现特殊场景(如工业设备异常、农业病虫害识别)的高效检测。文章涵盖Frigate配置、外部检测服务构建、高级集成技巧及性能优化实践,帮助开发者灵活扩展智能监控能力。

weixin_42662293的博客 350

React 入门 01 - Hello World

前言 基于项目需求,最近开始不得不接触前端开发的领域啦。吼吼,从此是不是可以成为所谓全栈开发了????~ 此系列学习笔记依然是以帮助自己学习、消化以及回忆为目的,将会涉及学习React,Type Script 以及目标 React Native 的心路历程。 Git ????戳我吧~ React React 官方系列教程是我学习的主要参考资料。React 是一个用于构建用户界面的 JavaScri...

指尖飞舞 719

通信原理与MATLAB(八):2PSK的调制解调

通信原理和MATLAB

菜yuan~的博客 3万+

javaSE01-Hello,World

笔记更新的比较慢,后续也会进行优化完善。

weixin_55692767的博客 333

【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od,

KJ.JK 218

ASProxy64.dll导致jetbrains家的IDE都无法打开。

摘要:在Windows11系统中,JetBrains IDE无法启动,报错指向ASProxy64.dll文件。该第三方DLL被注入到JVM原生层,导致内存访问冲突(错误代码0xc0000005)。经排查发现此文件来自Astrill软件。解决方案为卸载Astrill后重启电脑,问题得以解决。该案例表明第三方DLL注入可能影响IDE正常运行,卸载相关软件是最直接的解决方法。(149字)

猿小白的博客 937

01go的安装以及hello world

文章目录适用人员安装WindowsLinuxWindows下安装IDEGoLandLiteIDE第一个hello worldhello.go分析 适用人员 学习过其他编程语言 安装 Windows 将网址https://golang.google.cn/dl/复制到浏览器中,选择需要的版本。或是直接点击:go1.16.3直接下载1.16.3版本。 安装完成之后在命令行中输入go version 如果能显示出来,则代表安装成功。 Linux 同样是打开https://golang.google.cn/dl/,

SoftwareZhen的博客 269

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

01-C++ “hello world”

写在前面 接下来一段时间,我会重温一下C++ ,都说学习Java 需要十年功力,学好C++ 需要一辈子,当然,程序员的鄙视链(汇编 -&gt; C/C++ -&gt; java -&gt; python/js/php/OC), 这也让C++开发凌驾于其他程序员(C++的程序员自带的傲气--呵呵),C++也是其他许多语言的底层语言,了解了C++, 也可以帮助我们更好的了解底层原理。当然,和其他程序员...

东阁堂主的技术博客 321

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

01:Hello, World!

描述 对于大部分编程语言来说,编写一个能够输出“Hello, World!”的程序往往是最基本、最简单的。因此,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。 现在你就需要完成这样一个程序。 输入无。输出一行,仅包含一个字符串:“Hello, World!”样例输入 (无) 样例输出 Hello, World! 提示使用...

weixin_30924239的博客 246

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Day01 Hello,World

HelloWorld 随便新建一个文件夹,存放代码 新建一个Java文件 文件后缀名为.java Hello.java 【注意点】系统可能没有显示后缀名,需要我们手动打开 编写代码 public class Hello{ public static void main(String[] args){ System.out.print("Hellp,World!"); } } 编译javac java文件,会生成一个class文件(事先配置好环境变量) 运行

哈快乐吧 133

C++ 01 之 hello world

【代码】C++ 之 hello world。

LSG_Dawn的博客 220

01 hello world

#include <iostream> using namespace std; cout << “hello ..”<< endl; system(“pause”) retrun 0

m0_51793738的博客 124
上一篇: 无法打开包括文件: “ctype.h” 无法打开输入文件“accore.lib”
下一篇: 【Revit二次开发】族载入问题-具有共享族的族无法自动加入
红烧几何
博客等级 码龄6年 176粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值