|
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中加载,测试即可。(见附件)
本帖以下内容被隐藏保护;需要你回复后,才能看到! 游客,如果您要查看本帖隐藏内容请 回复 |
|