关于ObjectARX中自定义对象的OPM

关键字

ObjectARX,AutoCAD,自定义对象,OPM

在ObjectARX开发中,给自定义对象添加一个属性页面是个很有吸引力的事情,

学习路径如下,

1,学习ObjectARX的samples,其中AsdkSquareWrapper和polysamp

  1.1研究AsdkSquareWrapper,这个例子相对简单,比较容易看懂,

        弄清楚custent和 custentwrapper之间的关系,和一些固定的关系,和引用,哪些文件是中间生成等等,对没有COM编程经验的比较好;

        但估计是制作年代比较久远,按照readme虽然能编译通过,并且正确运行,但有些细节已经不一样了。

   1.2研究polysamp,这是一个复杂,但也有很多的值得学习的例子,包括自定义对象,如何映射到COM上,映射到dotNET上等等

        主要看compoly看如何映射到COM,

   1.3(可选)再研究AsdkSquare,并对其进行重新改造;

    小结:通过C++,实现一个OPM接口的属性页,asdkSquare为蓝本,已经足够了,不需要像polysamp那么复杂

    两者对比:

    A输出为一个DLL,然后由注册表文件REG,用户自行注册, 而P则是 包装成一个DBX文件,在AutoCAD的过程中,调用注册,完成注册,隐含使用了资源中RGS

    A中的main.cpp相对简单;P中则是增加了AcrxEntryPoint等函数,以支持上述问题

    A中无安装文件;P中提供了一个MSI项目参考,从而进行注册

    A的文件组织有缺陷,需要两次编译(一次生成MIDL,一次生成DLLs);而这方面P则比较好,重复包含IDL文件可以就可以解决这个问题

    A中的AsdkSquareLib.h应该是过时的产物,新的应该是AsdkSquareLib_i.h;而P则无这方面的问题

    A中使用DEF文件硬编码导出C++(很有勇气);而在P中则是使用的常规的 DLLIMPEXP 宏

   

2 网上资料

   这方面资料很少

2.1《OPM的实现 》 http://blog.csdn.net/pangshaohua/article/details/5259542

 这个只要看看其中的知识点就行,理解其中的含义即可,并不能说明其中是一种好的方案,或者整体知识是正确的。

2.2《动态属性》 http://objectarx.net

搜索OPM,有人写的一篇讲动态属性的文章,可以阅读其中讲解OPM机制,文件中一些变量的含义等等,对理解ATL有帮助,同样这里也有一些同Samp不同的地方

2.3 ARX向导

有些教程中是通过ARX向导完成项目初步建立,对建立项目应该有帮助,但我没有使用。

2.4 《OPM(对象属性管理器)在注意事项》 http://blog.csdn.net/pangshaohua/article/details/5268511

讲到了一些注意事项

2.5 对于dotNET版本的OPM,可以参考 DevBlog

3 要点

3.1 在属性面板中显示属性,则一定要实现subGetClassID;否则可以不用

3.1.1 其中的GUID要和IDL中的一致

原文地址:https://www.cnblogs.com/kevinzhwl/p/3876043.html