• 关于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中的一致

  • 相关阅读:
    初识反射
    eclipse简单使用
    常见的原生javascript DOM操作
    你知道CSS实现水平垂直居中的第10种方式吗?
    localStorage 存满了怎么办?
    localStorage使用总结
    js中利用cookie实现记住密码功能
    利用PHP将图片转换成base64编码的实现方法
    php获得可靠的精准的当前时间 ( 通过授时服务器 )
    校正PHP服务器时间不准的问题
  • 原文地址:https://www.cnblogs.com/kevinzhwl/p/3876043.html
Copyright © 2020-2023  润新知