zoukankan      html  css  js  c++  java
  • python模块win32com中的early-bind与lazy-bind(以Autocad为例)

    1.什么是Lazy-bind模式,Early-bind模式?

    win32com中,Lazy-bind 模式指的是程序事先不知道对象的任何方法和属性,当对象属性,方法被调用时,程序才向对象发出一个询问(query),如果对方法和属性的询问成功,则调用成功,而Early-bind则是指程序事先知道对象的方法,属性。Python 用makepy 来支持early-bind 模式。makepy是一个位于win32com模块中的一个.py文件(位于python的site-packages/win32com/client/makepy.py),直接运行该文件,弹出下面的控件,需要说明的是Pycomcad库直接内置了'TurnOnEarlyBind'方法,可直接调用该方法来使得该makepy.py运行,弹出下面控件:

    选择Autocad2007 Type Library[[1.0],点击ok。

    显示如上图,则表明makepy.py运行成功,此时已开启early-bind模式。

    2.Autocad下的两种模式。

    运用pycomcad(该模块是自己包裹win32com的Autocad便捷接口库,见https://github.com/JohnYang1210/PycomCAD)。

    (1)Lazy-bind模式

    拾取对象test是一个元祖,index 0 是拾取的实体对象,Index 1是拾取点的坐标,这里可见,test[0]的类型是CDispatch。

    (2)Early-bind 模式

    在该模式下,test[0]的类型是IAcadLine。

    help()进一步验证了early-bind模式事先知道该对象的所有属性和方法。

    3.early-bind在打包后受不受影响?可移植么?

    为此,在early-bind模式下将如下代码进行打包:

    from pycomcad import *
    acad=Autocad()
    print('Connect successfully...')
    test=acad.GetEntity()
    input('entry to exit...')

    形成test.exe文件

    将该文件在另一台电脑上运行,拾取cad上的线实体,得到如下:

    所以,答案是不受影响,并且可移植(如果在64位电脑上打包,则可以在其他64位电脑上运行,对于32位不行)。

    ##### 愿你一寸一寸地攻城略地,一点一点地焕然一新 #####
  • 相关阅读:
    解决一起web 页面被劫持的案例
    django rest framwork教程之外键关系和超链接
    django restframwork 教程之authentication权限
    Puppet nginx+passenger模式配置
    Django restframwork教程之类视图(class-based views)
    使用emplace操作
    C++中的显示类型转换
    整数加法
    在不知道学生人数和每个学生课程数量的情况下对学生的平均成绩排序
    树的高度
  • 原文地址:https://www.cnblogs.com/johnyang/p/12521301.html
Copyright © 2011-2022 走看看