找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1196|回复: 1

[分享] 手动配置ARX编译环境

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-1-13 08:15:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
创建Win32项目

. 0.jpg

选Dll

2.右键 属性
1.jpg


在“配置:”下拉列表中,选择“配置”。这将确保我们所做的更改都是应用于所有的配置。
选择节点“C / c++”- >“一般”。在“附加包括目录”项中,添加路径包括ObjectARX SDK的文件夹。也将警告级别设置为1级,“检测64位可移植性问题”。这样做是为了抑制警告我们不会影响我们在这个项目中。点击“OK”按钮申请并关闭对话框。同样,当你改变了任何属性在属性页面对话框中,您可以使用“OK”按钮并关闭申请。
->>常规.->>>   编译文件Release 把"编辑并继续"改成禁用
2.jpg    
另外,你还可以指定为ObjectARX的头文件,并使用VC++ .NET选项对话框(在工具 - 提供>选项菜单)库文件的位置。这将确保VC ++。NET将搜索ObjectARX的头文件和库文件中的这些路径第一,因此你不必设置路径,每一个ObjectARX的项目。要设置的路径在选项对话框中的“项目”节点,选择“VC++目录”的项目。从下拉列表“选择目录为:”选择项“包含文件”。添加新项,并设置路径ObjectARX的头文件。类似地设定为库文件的路径。
3.jpg
单击“配置属性”节点的节点“C / C ++”上。选择项目“代码生成”。在列表中选择项目“运行时库”。通过选择下拉列表中的财产分配财产“多线程DLL(/ MD)。
4.jpg


选择节点“连接器” - >“输入”。在“附加依赖”项中添加以下库:
rxapi.lib acdb17.lib acge17.lib acad.lib acedapi.lib

5.jpg

接下来,选择节点“连接器” - >“常规”。在“附加库目录”的项目,增加路径的ObjectARX SDK的库文件夹。
在“输出文件”项,从“.DLL”到“.ARX”更改输出文件的扩展名。

6.jpg

从“项目”下拉菜单中选择“添加新项”(快捷键Ctrl+ Shift + A)。
在“添加新项”对话框中,选择项“C ++文件(的.cpp)”。
在“名称”中输入“HelloWorld”的编辑微博,然后单击“添加”添加cpp文件。

7.jpg

添加代码HelloWorld.cpp。
首先,我们需要包含两个ObjectARX的头文件:aced.h和rxregsvc.h。这些都为接收应用程序定义,并获得了AutoCAD的编辑器专用的服务(aced.h)的头文件,并为acrxXXX效用函数(rxregsvc.h)的标题。加入他们如下:



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





接下来,我们声明两个函数:

initApp() - 这将是由AutoCAD中被调用时,我们的应用程序加载和
unloadApp() - 这在我们的应用程序被卸载时调用。
请参阅acrxEntryPoint()函数下面来看看如何将这些功能也被称为AutoCAD的。添加以下声明:


void initApp();
void unloadApp();


接下来,我们宣布我们自己的函数来打印的“Hello world!”在AutoCAD命令行。 加:


void helloWorld();


现在我们将定义initApp()函数。此功能寄存器与AutoCAD命令机制,一个新的命令。这个新的命令将成为一个额外的进入我们的应用程序:


void initApp()
{
// register a command with the AutoCAD command mechanism
acedRegCmds->addCommand(_T("HELLOWORLD_COMMANDS"),
                        _T("Hello"),
                        _T("Bonjour"),
                        ACRX_CMD_TRANSPARENT,
                        helloWorld);

}


有关的acedRegCmds宏和addCommand()方法(AcEdCommandStack类)的详细信息,请参阅ObjectARX的联机帮助文件。 addCommand的第一个参数()是命令组名(只包括一个在我们的例子命令)。第二个参数是全球/未翻译命令名称。第三个参数是相同的命令在本地/译名。第四个参数是命令标志(注意,这里我们定义一个透明命令,这意味着该命令可以调用而另一个命令是激活的)。最后,最后一个参数是指向函数被调用我们的命令。在C ++中,这是函数名本身。

下一步我们定义unloadApp()函数。该功能将消除我们的指挥小组,这也将消除我们的命令。由于与AutoCAD注册命令成为其他入口点到我们的应用程序,这是绝对必要删除它们的应用程序卸载时。 加:


void unloadApp()
{
acedRegCmds->removeGroup(_T("HELLOWORLD_COMMANDS"));

}


接下来,我们定义我们的helloWorld()函数; acutPrintf()是重定向到AutoCAD命令行的C printf函数的等价物。 加:




void helloWorld()
{
acutPrintf(_T("\nHello World!"));

}


漂亮的基本哉!

现在,我们需要定义的最重要功能ObjectARX应用程序。所有ObjectARX应用程序有一个用于通信一个主入口点:在acrxEntryPoint()函数。请记住,ObjectARX应用程序是一个DLL,因此不具有主()入口点。 AutoCAD中调用ObjectARX的模块acrxEntryPoint()函数将消息传递给应用程序。

acrxEntryPoint的第一个参数()是AcRx类称为味精它代表从ObjectARX的内核应用程序发送的消息的数据成员。请参考有关不同消息的ObjectARX应用程序可以从AutoCAD接收信息的在线帮助。

在我们的非常简单的例子,我们需要在应用程序加载和卸载,以注册和注销我们的“你好”命令通知。在第一种情况下,我们将调用我们的initApp()函数;在第二种情况下,我们将调用我们的unloadApp()函数。

acrxEntryPoint的第二个参数()是一个不透明的手柄传递给不同的功能,例如锁定数据和解锁功能(取决于由AutoCAD的传递所述消息此数据的变化)。

默认情况下,应用程序都被锁定,这意味着一旦加载它们不能被卸载。由于我们的应用程序是非常简单的(它没有定义AutoCAD和其他应用程序是指,除了我们的命令对象),我们可以放心地解开我们的应用程序,使之卸,只要我们消除我们的命令首先,这是在我们的unloadApp实现() 功能。

而且在默认情况下,ObjectARX应用程序不是MDI知道(再次,请参阅有关MDI问题的详细信息,在线帮助)。应用程序需要显式地登记自己作为MDI知道使用acrxRegisterAppMDIAware()全局函数。

注:注册的应用程序作为MDI意识到本身并不是足够的应用是有效的MDI察觉。需要被满足的条件在ObjectARX的在线文档细节进行了描述。

由于我们的应用程序是非常简单的(它不使用文件的概念,不与AutoCAD图形数据库进行交互),我们可以放心地注册它作为MDI知道使用acrxRegisterAppMDIAware()全局函数。加:



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

case AcRx::kInitAppMsg:
acrxDynamicLinker->unlockApplication(pkt);
acrxRegisterAppMDIAware(pkt);
initApp();
break;
case AcRx::kUnloadAppMsg:
unloadApp();
break;
default:
break;

}

return AcRx::kRetOK;

}



最后,我们需要导出acrxEntryPoint()函数,以便AutoCAD中可以访问它。有几种方法可以做到这一点。其中包括创建一个定义(.DEF)在接下来的主题文件中说明的。




从“项目”下拉菜单中选择“添加新项”(快捷键Ctrl+ Shift + A)。
在“添加新项”对话框中,选择项“DEF文件(.DEF)”。
编辑框:在“名称”中输入“ArxProject”。点击“打开”


添加以下信息到新的文件。所有ObjectARX应用程序拥有自营出口至少有两个功能:

acrxEntryPoint
acrxGetApiVersion。


EXPORTS
acrxEntryPoint PRIVATE
acrxGetApiVersion PRIVATE





我们的项目已经准备好要建。如果你已经正确地按照本教程中,你应该得0错误和0警告。

注意:您可能会收到链接器警告LNK4099为构建过程中rxapi.lib和acedapi.lib库。您可以放心地忽略这些警告。

在AutoCAD中,输入“你好”加载step01.arx运行我们的命令。

要加载step01.arx,选择这些方法之一:

只需拖动从资源管理器的文件到AutoCAD窗口。
使用AutoCAD的“ARX”命令,“加载”选项,在命令行提示符。
从工具下拉菜单在AutoCAD中,选择“加载应用程序...”选项。
使用AutoCAD命令“APPLOAD”。
一旦应用程序被加载,输入“你好”或“Bonjour”在命令行上会显示的“Hello World!”信息。

您也可以下载解决项目在Step01解决的项目。




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 769个

财富等级: 财运亨通

发表于 2017-1-13 18:08:18 | 显示全部楼层
正需要,支持楼主大人了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-26 14:23 , Processed in 0.175230 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表