开始使用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过程中产生不可预见的后果。 |