乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 65|回复: 4

ArxCreatorR14——ARX编程助手

[复制链接]

1

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2007-4-22 17:29:00 | 显示全部楼层 |阅读模式
VC6下普通(非MFC)ObjectARX工程的建立
设置inclued,和library库的路径



 一、创建新工程
由于ARX程序本质上是一个动态库,因此首先创建一个动态库工程。选择File菜单的New命令,创建一个一个新工程。选择工程类型为Win32 Dynamin-Link Library(Win32动态库),并且输入工程名称为ARXHello ;最后,按OK按钮即可。
  创建完工程以后,接下来按照下面的步骤来设置ARX程序的编译开关(在此以Win32 Debug版本为例,并且首先保持默认值)。
首先,选择“Project/Settings”菜单命令,在弹出的对话框中选择“C/C++”属性页。
1.选择Category(目录)为Code Generation。确保“Use run-time library”项为Mutithreaded DLL或Debug MutithreadedDLL。一般情况,该选项可以采用这两者之一,不过有时在编译无法通过时可以考虑改变该项设置。
2.选择Category为Preprocessor,在Preprocessor definitions列表中添加“ACRXAPP”和“RADPACK”。
其次,设置“Link”属性。
1.选择Category为General,将Output file name(输出文件名)为ArxHello.arx(一般情况ARX程序即动态库以.arx为后缀,以便于区别其它Win32动态库);另外,将acad.lib、acedapi.lib、rxapi.lib等输入库添加到“Object/LIBRARY modules”列表中(这三个库文件基本上可以满足通常的ARX编程任务)。
2.选择Category为Input;然后,在“Ignore libraries”中输入msvcrt.lib。该项的含义是通知编译程序在编译工程时忽略msvcrt.dll缺省库文件(这是一个C运行库)。因为ARX的库文件与此有冲突,编译工程时将出现警告信息,但是该警告错误并不会影响ARX程序的运行性能。如果用户希望在ARX编程中使用C运行库函数(如sprintf等),那么就不能忽略该库文件。
3.选择Category为Output;然后,在“Base address(基地址)”输入0x1c000000;在“Entry-point symbol(函数入口标志)”输入DllEntryPoint@12。这两项是供14在加载ARX程序(即动态库)时内部使用,在ARX编译设置中必不可少。
二、编写源代码
首先,在工程中添加一个.cpp文件(本例命名为ArxMain.cpp),在其中添加如下代码。
//A sample ARX program,like MFC
program named "Hello World!"
#include

void ArxTest()
{
ads_alert("OK,ARXprogramming!");
//显示一个包含指定字符串的对话框
return;
}

void initApp()
{
/*向AutoCAD14登记一个定制的命令*/
acedRegCmds->addCommand("ASDK_DWG_COMMANDS",
"TEST","TEST",ACRX_CMD_MODAL,ArxTest);
return;
}

void unloadApp()
{
acedRegCmds->removeGroup
("ASDK_DWG_COMMANDS");
return;
}
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg,void* pkt)
{
switch(msg){
case AcRx::kInitAppMsg:
  acrxDynamicLinker->unlockApplication(pkt);
//允许应用程序能够卸载
initApp();//初始化应用程序
break;
case AcRx::kUnloadAppMsg:
  unloadApp();
//应用程序退出前进行必要的清理
break;
case AcRx::kLoadDwgMsg:
  break;
}
return AcRx::kRetOK;
}
  本例中,ArxTest函数是用户为实现一定目的而定义的函数,其它只是ARX(AutoCAD14)的接口。在本例中使用了几个ADS/ARX函数(或宏),如ads_alert()、acedRegCmds->addCommand等。其中addCommand宏是向AutoCAD14登记用户定制的命令(即TEST),只要用户在AutoCAD14的Command提示符下键入TEST就可以执行ArxTest()函数模块。acrxDynamicLinker->unlockApplication是通知AutoCAD14该应用程序可以卸载,即通过Arx/Unload命令卸载应用程序。
  另外,在当前工程中添加一个.DEF文件,然后添加如下代码。

LIBRARY ARXHello
DESCRIPTION 'ARX program for AutoCADR14'

EXPORTS
acrxEntryPoint
_SetacrxPtp
acrxGetApiVersion
  同任何动态库的创建一样,LIBRARY节的内容必须要与工程输出的文件名相同。在EXPORTS节中,通常情况除了acrxEntryPoint函数外,还声名SetacrxPtp和acrxGetApiVersion两个函数(它们已经在rxapi.lib中输出,因此不用添加它们的实现代码),这也是一般ARX编程所常用的.DEF文件设置。
  这样就可以编译该工程了,最后生成ARXHello.arx文件。在AutoCAD14中可以使用Arx/Load命令(或Tool/Load Application菜单命令)来加载AutoCAD应用程序;然后,在Command提示符下键入test,那么将弹出一个对话框。






















ArxCreatorR14­——ARX编程助手(见附件)

上述手工建立工程的方法很慢,影响大家学习的积极性。为了方便大家学习Object ARX二次开发,提高学习效率,我特意写了ArxCreatorR14(请先按上述方法设置inclued,和library库的路径)。
程序主界面如下

单击“浏览(B)…”按钮,探出路径选择对话框,如下图:

单击“确定(O)”按钮,
                        提示“工程创建成功!”

打开刚刚创建的工程文件夹,可以看到程序已帮我们生成了三个文件,如下图:
                               

双击Hello.dsp(或启动VC++6后,打开),在VC++6.0 IDE中打开项目,编译,连接后生成*.arx文件

在AutoCAD R14中加载,测试即可。(见附件)

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

6

主题

33

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2011-12-12 13:11:00 | 显示全部楼层
好东西收下了,谢谢楼主
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2020-4-16 00:06:00 | 显示全部楼层
收下,感谢!
回复

使用道具 举报

6

主题

16

帖子

6

银币

初来乍到

Rank: 1

铜币
40
发表于 2020-4-20 13:26:00 | 显示全部楼层

谢谢楼主分享
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2020-9-13 15:02:00 | 显示全部楼层
只能用于VC6?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 00:52 , Processed in 0.157950 second(s), 68 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表