几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(VB.NET/C#)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 2009-04-20, 02:36 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】[arx]objectarx managed wrapper classes参考中文档(1)

[arx]objectarx managed wrapper classes参考中文档(1)
www.dimcax.com
[arx]objectarx managed wrapper classes参考中文档(1)本人曾写过“利用c#进行autocad的二次开发”,所采用的是autocad提供的activex接口。但我总觉得它与autocad不能很能好的兼容,现在好了,有了最新的objectarx managed wrapper classes(呵呵,就是专门为.net量身定做的用于autocad的二次开发)。从现在开始,广大.net程序员就可以不必羡慕objectarx的强大功能,不需要再使用学起来比较难的c++了,只要用自己喜欢的c#或vb.net就可以进行autocad的二次开发了。
好了,闲话少说,现在进入正题,我这次翻译的是objectarx managed wrapper classes的中文参考。
objectarx托管封装类(objectarx managed wrapper classes)
objectarx?提供了托管封装类(managed wrapper classes)来使程序员能使用microsoft .net framework并利用vb .net 和 c#等.net语言来进行编程。你可以通过查看objectarx帮助文件的托管封装类(managed wrapper classes)部分来获取托管封装类(managed wrapper classes)的详细列表。要了解.net framework的相关信息,请查看microsoft的有关文档。
这一章假定你对objectarx和autocad? 数据库有所了解。

objectarx托管封装类(the objectarx managed wrapper classes)概览
托管封装类(managed wrapper classes)由objectarx sdk提供,它使你能够利用任何一种microsoft .net framework所支持的语言来进行编程。托管类主要的功能与数据库有关,它可以用来编制读写dwg文件的应用程序。
你可以通过查看objectarx帮助文件的托管封装类(managed wrapper classes)部分来获取托管封装类(managed wrapper classes)的详细列表。
objectarx托管封装类(the objectarx managed wrapper classes)存放在下面两个组件中:
acdbmgd.dll 包含objectdbx api。这个dll是objectdbx sdk 的一部分,随autocad 一起发售。
acmgd.dll包含autocad api。这个dll随autocad 一起发售。
c++和objectarx中定义的数据类型在.net中有相应的部分。例如,c++中的bool型在.net中是system::boolean,而objectarx中的adesk::boolean在.net中是system::bool。
objectarx类和托管封装类(managed wrapper classes)是相对应的。下表显示了objectarx类和.net命名空间(namespace)的映射关系:
objectarx类 .net命名空间
acdb autodesk.autocad.databaseservices
acrx autodesk.autocad.runtime
aced autodesk.autocad.applicationservices
acut autodesk.autocad.databaseservices,
autodesk.autocad.applicationservices
accm autodesk.autocad.colors
acge autodesk.autocad.geometry
acgi autodesk.autocad.graphicsinterface
acly autodesk.autocad.layermanager
acpl autodesk.autocad.plottingservices
c++和.net的编程差异
下面的主题讨论objectarx类和对应的.net部分之间的不同,并对托管封装类(managed wrapper classes)的使用提出一些有用的建议。
这一部分的主题:
内存管理和回收模式
c++使用销毁器来清理资源。objectarx托管封装类以实现idisposable接口来做同样的事情。托管封装类派生于通用基础类disposablewrapper,disposablewrapper的作用是来管理非托管内存。
由于被objectarx托管封装类使用的内在资源是非托管类,因此你必须明确调用托管封装类的销毁器函数dispose。这样可以释放所有继承的基类所拥有的资源。不要指望.net垃圾搜集器来回收被非托管资源所占用的内存。
对象的唯一性
objectarx托管封装类不能保证你每次访问一个c++对象时得同一个.net对象。例如,连续打开数据库中的同一个对象两次将会产生两个不同的.net对象。但是,通用基础类disposablewrapper重载了equals和gethashcode方法。equals比较内在的非托管指针,而gethashcode返回内在的非托管指针。这一点保证了.net客户端可以把这两个不同的托管封装对象视为同一个。
错误处理
objectarx利用函数的返回值来表示不同的错误情况。在.net中标识错误的比较好的方法是产生一个异常(exception)。objectarx托管封装类用异常来表示objectarx错误代码。一些错误代码和.net本身的异常相对应,而其他的错误代码和objectarx托管封装类提供的通用异常类相对应。
get和set方法与属性
在c++中对象的属性被封装为get和set方法。而.net则使用属性。objectarx托管封装类的属性与get和set方法相对应。
反应器与事件
objectarx使用反应器来封装事件。因为.net使用事件,所以objectarx托管封装类的事件与反应器相对应。
非托管反应器需要两个类:事件源类和抽象反应器类。事件源类由系统实例化,并提供addreactor()和removereactor()函数。客户端从抽象反应器得到一个具体的反应器类,并实例化这个具体的反应器,然后把它加入事件源。当事件发生时,事件源调用具体的反应器中的虚函数。
objectarx托管封装类把反应器模式封装成一个带有托管事件的事件源类。
集合和遍历
在objectarx中,遍历在类中没有被标准化。而对于托管封装类来说,两个接口使遍历能够进行。集合实现了ienumerable接口。由getenumerator方法返回的iterators实现了ienumerator接口。
注册命令
objectarx允许扩展应用程序在autocad中注册命令。这个注册是隐含的:应用程序运行时必须找到它想注册的命令。
.net让应用程序使用声明的形式来定义程序的行为。objectarx托管封装类使用声明的形式来注册命令。通用属性被用来指明命令。请参阅“在托管程序中定义autocad命令”这一部分来看具体的代码和详细的信息。
全局函数
objectarx托管封装类中没有全局函数,所以许多objectarx全局函数被映射成新的.net对象或已存在的.net对象的属性。
例如,在程序中用于和autocad命令行提示相交互的objectarx全局函数,在objectarx托管封装类中使用一个新的commandlineprompt类进行这一类封装。
另一类objectarx全局函数返回实例对象的指针。例如,objectarx使用acdbtransactionmanagerptr()函数为返回acdbtransactionmanager的指针。像这一类函数在.net中已被映射成对象的属性,所以数据库有一个transactionmanager属性。

c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。

【精华】好文章 积分+1 金钱+10 经验+5 魅力+5 [mccad |
大家就不要再讨论c#和vb.net谁优谁劣了,呵呵还是把主要的精力放在如何用.net来开发autocad上来。我觉得能用c#的就一定看得懂vb.net的代码,反之亦然。
【送花】送上鲜花一朵 鲜花+1 [francoldh |
翻译的不错,请问是手工翻译还是借助什么软件?
对于选择vb还是c#,我感觉还是vb.net更好些,原因如下:
1. 从.net方面,vb和c#有相同的能力和编译水平,vb的ide搞开发更省事些。
2. 工程上用的软件最主要的就是健壮、和开发省力运行速度在其次,至于采用的是什么技术就更无人关心了。从activex方面,我觉得相比arx来说activex做不到的就是定义acad命令和jig夹具,好像arx不是无所不能,比如我还每找到如何实现zoom功能以及访问acad菜单的方法,倒是activex能做到。虽然activex限制多些,但是arx中80%的功能都具备并且用起来比arx省事也健壮,而使用activex当然是vb更方便。。arx作为activex的补充更合适。请记住,在具备相同能力的前提下,越是简单的工具干出的活才越漂亮,开发人员才更有精力增加软件的可靠性和功能。
严重同意netarx的观点,用vb.net进可用arx方式,退可用ax方式,虽然不能自定义实体,但自定义实体听说在脱离了应用程序的cad环境下打不开,这样也不通用.顺便问一下,自定义实体有什么好处?
以下是引用wxiaohong在
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭

相似的主题
主题 主题发起者 论坛 回复 最后发表
【转帖】zhf7878,请问哪里找到objectarx managed wrapper classes的资料 yang686526 ObjectARX(VB.NET/C#) 0 2009-04-20 02:27 PM
从c++到c++/cli yogy vc编程 1 2007-07-23 02:10 PM


所有的时间均为北京时间。 现在的时间是 09:58 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多