明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3459|回复: 0

[ARX]ObjectARX managed wrapper classes参考中文档(2)

[复制链接]
发表于 2004-7-16 14:14:00 | 显示全部楼层 |阅读模式

开始使用ObjectARX托管封装类

不管你是使用Microsoft Visual C# .NET 或Visual Basic .NET,通过Visual Stutio和ObjectARX托管封装类建立一个.NET解决方案的基本步骤是一样的。

开始通过Microsoft Visual Studio使用ObjectARX托管封装类

1.在Visual Studio .NET中,创建一个类库解决方案和工程。

2.从工种菜单或解决方案浏览器中选择添加引用

3.浏览\Program Files\AutoCAD 2005目录,然后选择acdbmgd.dll和acmgd.dll。

4.在主类文件中,添加你要使用的命名空间。

例如,在C#中:

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Runtime;

或在VB.NET中:

Imports Autodesk.AutoCAD.ApplicationServices

Imports Autodesk.AutoCAD.DatabaseServices

Imports Autodesk.AutoCAD.Runtime

ObjectARX SDK 在\samples\dotNet目录下提供了几个基本的 VB .NET的例子。

在托管程序中定义 AutoCAD命令

建立好.NET工程后,你就可以定义实现应用程序功能的类了。在“注册命令”部分中曾提到过,你必须遵循AutoCAD特殊的协议来注册AutoCAD命令。

对于每一个定义的AutoCAD命令来说,在程序中必须对所对应的方法标识CommandMethod属性。这个属性可以有一个或几个参数。最简单的形式是只赋于一个全局命令名。以下的代码定义了一个名为XRECORD的AutoCAD命令,它是由XrecCommand方法(C#)/子程序(VB.NET)来处理的。

//C#

[CommandMethod("XRECORD")]

public static void XrecCommand(){

...

}

‘VB.NET

<CommandMethod("XRECORD")> _

Public Shared Sub XRecCommand()

'...

End Sub

重载CommandMethod属性可以定义一个命令名,一个本地化名以及命令标识符。下面的代码演示了一个带有命令标识符的CommandMethod属性:

//C#

[CommandMethod("COMINTEROP", CommandFlags.Session)]

public static void ComInteropCommand(){

...

}

‘VB.NET

<CommandMethod("COMINTEROP", CommandFlags.Session)> _

Public Shared Sub ComInteropCommand(){

'...

End Sub

这个属性声明定义了一个名为COMINTEROP的AutoCAD命令,使用ComInteropCommand方法(C#)/子程序(VB.NET)作为命令处理的方法。CommandFlags.Session命令标识符表明这个命令应当在session中运行。注意,这个方法被声明为static(C#)/Shared(VB.NET)。

和ObjectARX 一样,一个命令处理器必须是一个无返回值和参数的公有方法。

实例命令方法和静态命令方法

命令方法可以被声明为实例方法或静态方法。静态命令方法在C#中用static关键字声明,而在VB.NET中是Shared. 实例命令方法是没有用static或Shared关键字声明的类的公有成员。

对于实例命令方法来说,每一个打开的文档都会实例化方法内包含的类。也就是说每一个文档都会得到命令的实例数据的一个私有拷贝。这样的话,当用户切换文档时就不会存在覆盖文档数据的危险。如果实例方法需要共享数据,它可以通过声明static或Shared成员变量来进行。

对于静态命令方法来说,托管封装运行模块不需要实例化方法内包含的类。不管文档的情况如何,只有一个方法数据的拷贝被使用。静态命令通常不使用基于文档的数据,而且不需要专门考虑MDI模式。

实例命令和静态命令可以通过定义命令标识符来适应不同的需求。例如,一个实例方法可以声明一个带有CommandFlags.Session标识的属性。这意味着这个命令运行在程序级的情况,但它仍保持基于文档的数据。一个这种命令的AutoCAD例子是PROPERTIES命令。

相应地,静态方法可以被声明为不带CommandFlags.Session标识。这样声明对于运行在基于文档的命令是有用的,但是它不须保持基于文档的数据。

命令标识在ObjectARX参考中的AcEdCommandStack::addCommand()主题中有详细的描述。

在AutoCAD中装载托管程序

要装载一个托管程序,在AutoCAD命令提示行中键入NETLOAD,然后选择需要的DLL文件。托管程序只有在AutoCAD退出时才会卸载。

处理托管程序中的异常 多数情况下,ObjectARX托管API应当在异常处理的try块被调用。许多API要么产生自己的异常,要么使用内在的对象来把没有处理的异常传递给另外的程序。如果没有捕获异常,命令可能会非正常终止,并且有可能在同一个AutoCAD过程中产生不可预见的后果。

评分

参与人数 1金钱 +3 收起 理由
zfbj + 3 【好评】好文章

查看全部评分

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 10:25 , Processed in 0.158280 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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