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运行,弹出下面控件:

python模块win32com中的early-bind与lazy-bind(以Autocad为例)

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

python模块win32com中的early-bind与lazy-bind(以Autocad为例)

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

2.Autocad下的两种模式。

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

(1)Lazy-bind模式

python模块win32com中的early-bind与lazy-bind(以Autocad为例)

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

(2)Early-bind 模式

python模块win32com中的early-bind与lazy-bind(以Autocad为例)

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

python模块win32com中的early-bind与lazy-bind(以Autocad为例)

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文件

python模块win32com中的early-bind与lazy-bind(以Autocad为例)

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

python模块win32com中的early-bind与lazy-bind(以Autocad为例)

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

上一篇:collections中namedtuple的用法


下一篇:asp.net网站管理工具 遇到错误。请返回上一页并重试。