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

python模块win32com中的early-bind与lazy-bind(以Autocad为例)的更多相关文章

  1. python模块collections中namedtuple()的理解

    Python中存储系列数据,比较常见的数据类型有list,除此之外,还有tuple数据类型.相比与list,tuple中的元素不可修改,在映射中可以当键使用.tuple元组的item只能通过index ...

  2. Python模块包中__init__.py文件的作用

    转载自:http://hi.baidu.com/tjuer/item/ba37ac4ce7482a0f6dc2f08b 模块包: 包通常总是一个目录,目录下为首的一个文件便是 __init__.py. ...

  3. Python模块NumPy中的tile(A,rep) 函数

    from NumPy import * 函数形式: tile(A,rep) 功能:重复A的各个维度 参数类型: - A: Array类的都可以 - rep:A沿着各个维度重复的次数 这个英文单词的本意 ...

  4. 使用 from import方法导入Python模块

    比如我们导入一个数学计算的模块 math: >>> import math>>> print math<module 'math' (built-in)> ...

  5. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  6. Python从内存中使用编译后的模块

    在Windows编程的时候,有些时候,我们经常会要使用一些非常规的方法,比如说从内存中加载DLL,然后使用DLL中的函数.于是就思索在用Python的时候是否能够将几个编译好的Pyc合并成一个,然后使 ...

  7. 嵌入Python系列 | 调用Python模块中无参数函数

    开发环境 Python版本:3.6.4 (32-bit) 编辑器:Visual Studio Code C++环境:Visual Studio 2013 需求说明 在用VS2013编写的Win32程序 ...

  8. 在 C 代码中嵌入 Python 语句或使用 Python 模块 (Visual Studio 2013 环境设置)

    1) 新建一个 内嵌 Python 语句的 C 代码, // This is a test for check insert the Python statements or module in C. ...

  9. 嵌入Python | 调用Python模块中无参数的函数

    开发环境 Python版本:3.6.4 (32-bit) 编辑器:Visual Studio Code C++环境:Visual Studio 2013 需求说明 在用VS2013编写的Win32程序 ...

随机推荐

  1. 手动合并hadoop namenode editlog

    一. 基本概念 1.NN恢复实际上是由fsimage开始(这个相当于数据的base),如果有多个fsimage,会自动选择最大的fsimage,然后按照editlog序列日志开始执行日志 2.seen ...

  2. Codeforces Round #635 (Div. 1)

    传送门 A. Linova and Kingdom 题意: 给定一颗以\(1\)为根的树,现在要选定\(k\)个结点为黑点,一个黑点的贡献为从他出发到根节点经过的白点数量. 问黑点贡献总和最大为多少. ...

  3. hdu4028 The time of a day (map+dp)

    Problem Description There are no days and nights on byte island, so the residents here can hardly de ...

  4. Python Base64编码解码

    import base64 str = '12345678'.encode('utf8') print(base64.b64encode(str).decode('utf8')) # 编码 接收的参数 ...

  5. 牛客编程巅峰赛S1第11场 - 黄金&钻石 B.新集合 (DFS)

    题意:有\([1,n]\)这\(n\)个数,构造集合,集合中不能包含\(u\)和\(v\),问最多能构造多少个集合. 题解:被这题卡了一整场.....以为是推公式,结果答案是暴搜? ​ 首先我们先用一 ...

  6. WSL2 Ubuntu apt-get update失败

    情况: 这个问题在github上也有讨论:https://github.com/microsoft/WSL/issues/4342 不过经过我的尝试,是DNS问题,这是默认的配置: 这个配置来自win ...

  7. 一个C++源文件从文本到可执行文件经历的过程

    一个C++源文件从文本到可执行文件经历的过程 以Hello World为例进行说明 首先我们编写一个cpp源程序 test.cpp #include <iostream> using na ...

  8. golang1.16新特性速览

    今天是假期最后一天,明天起大家也要陆续复工了.golang1.16也在今天正式发布了. 原定计划是2月1号年前发布的,不过迟到也是golang的老传统了,正好也趁着最后的假期快速预览一下golang1 ...

  9. 微前端 & 微前端实践 & 微前端教程

    微前端 & 微前端实践 & 微前端教程 微前端 micro frontends https://micro-frontends.org/ https://github.com/neul ...

  10. GitHub for mobile

    GitHub for mobile https://github.com/mobile