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位不行)。

    ##### 愿你一寸一寸地攻城略地,一点一点地焕然一新 #####
  • 相关阅读:
    LF.25.K Smallest In Unsorted Array
    LC.102. Binary Tree Level Order Traversal
    LF.236.Search Insert Position
    发生错误 1069 sqlserver
    manualresetevent的用法学习
    xml selectnodes
    Flask 路由 , 初始化 , 配置Config , 蓝图BluePrint , 装饰器
    Python垃圾回收机制
    Odoo 动作Action
    Odoo 权限简介
  • 原文地址:https://www.cnblogs.com/johnyang/p/12521301.html
Copyright © 2011-2022 走看看