python与vb可以互换吗_VB6+Python混合编程(COM组件)(转)
VB6+Python混合编程(COM组件)
0.2572018.05.10 16:01:23字数 553阅读 3725
Python的方便不用说,VB6做GUI的简单程度更不用说。二者混合编程的需求一直非常旺盛,但我苦苦搜寻了很久,始终未找到合适的解决方案。
在很长一段时间内,我都是通过创建、读取、删除临时文件来在VB程序和Python程序间传递信息,麻烦,且低级。(如下)
比如下面是一个典型的处理流程
1. VB创建需要处理的文本please.txt,并调用Python
2. Python读取、处理文本,并将处理后的文本保存为ok.txt
3. VB在执行上面语句后进入死循环,等待ok.txt生成,完成后读取,继续流程
诸位请看,是不是非常符合麻烦、低级的描述?但没有更好的解决方案,只有如此。
----激动人心的分界线-----
后来发现了一本书(python programming on win32,有兴趣的找来看),终于让我发现了解决方法。COM组件!
COM is a technology from Microsoft that allows objects to communicate without the need for either object to know any details about the other, even the language it's implemented in.
看看本书某章节的总结:
We have seen examples of the various data types that can be passed back and forth between the two languages: numbers, strings, and arrays. The ability to pass multidimensional arrays allows you to move large amounts of data between the two languages without writing a lot of conversion code.
也不用说很多,不想看书的,看看下面这个我从书中摘抄的简短例子,就能知道该方法的核心之处。
在python里:
#需要先安装pipywin32模块
importpythoncomclassPythonUtilities:
_public_methods_=['SplitString']
_reg_progid_='PythonDemos.Utilities'_reg_clsid_=pythoncom.CreateGuid()def SplitString(self, val, item=None):importstringif item !=None:
item=str(item)
val=str(val)returnval.split(item)if __name__=='__main__':print ('Registering COM server...')importwin32com.server.register
win32com.server.register.UseCommandLine(PythonUtilities)
以管理员身份执行上述代码。在注册成功后,COM组件会一直保留,不受开关机影响,因此可以在任意时候进行调用。最妙的是,你可以随时更新代码的函数部分,而无需重新注册,因此通常情况下,你只需要在注册时使用管理员权限。
在VB里:
Private SubForm_Load()Set PythonUtils = CreateObject("PythonDemos.Utilities")
response= PythonUtils.SplitString("Hello from VB")For Each Item InresponseMsgBoxItemNext
End Sub
上面说COM组件会一直保留,如果需要注销,可使用管理员权限执行命令行语句(py_name是上面python文件的名称)。
> python py_name.py --unregister
多余的不用说了,一试便知,这点代码足以解决诸多混合编程的难题。
该方法不仅适用于VB+Python,Office,Delphi,C++等等,均可使用。
上面的COM方法返回的是 python 的列表类型,怎样在 delphi 中使用呢?《Python Programming on Win32》7.3 一节中提供了使用方法:
uses ComObj;varserver, ret: Variant;
i: integer;beginserver := CreateOleObject('PythonDemos.Utilities');
ret := server.SplitString('Hello from VB');for i := VarArrayLowBound(ret, 1) to VarArrayHighBound(ret, 1) do beginShowMessage(ret[i]);end;end;
类似地,如果需要向COM中传入python的LIST数据类型,可以在delphi中使用 Variant 类型(参见《Delphi中的变体Variant数组相关函数》 https://www.cnblogs.com/c2soft/articles/11660228.html )构建数组,然后传入COM中。
python与vb可以互换吗_VB6+Python混合编程(COM组件)(转)相关推荐
- python与vb可以互换吗_vb能配合python写程序么?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #自定义结构的传递的确比较麻烦,如果找到更好的方法,请务必告诉我 class ReadMail: _public_methods_=['Read_mail ...
- python与vb可以互换吗_把python 语句变成 vb 语句,仅仅几句
一个小的程序,用来求 方程的解. 因为想知道vb 的程序写法,, 请大侠帮助. ''' def f(x): # f(x) = x^3 + 4 x^2 -8 #kk= math.pow(x, 3) + ...
- python调用vb文件_vb能配合python写程序么?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #自定义结构的传递的确比较麻烦,如果找到更好的方法,请务必告诉我 class ReadMail: _public_methods_=['Read_mail ...
- 疯狂python讲义课后题答案_疯狂Python讲义
第1章 Python语言概述和开发环境 1 1.1 Python简介 2 1.1.1 Python简史 2 1.1.2 Python的特点 3 1.2 Python程序运行机制 3 1.3 开发Pyt ...
- python和vb的代码可以通用吗-VB6+Python混合编程(COM组件)(转)
VB6+Python混合编程(COM组件) 0.2572018.05.10 16:01:23字数 553阅读 3725 Python的方便不用说,VB6做GUI的简单程度更不用说.二者混合编程的需求一 ...
- 大学python和vb哪个简单-python和vb哪个简单
Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.是一种可用于 ...
- python和vb的代码可以通用吗-python和vb哪个简单
Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.是一种可用于 ...
- 大学python和vb哪个简单-vb和python哪个速度快
Python好学,易上手.如果你是第一次学习计算机编程语言,推荐你学这个.更重要的是,学会这门语言,也能方便你对电脑中的文档进行处理.VB,面对大多数任务,编码速度都不及Python的. VB能快速的 ...
- vb还是python强大-VB已死,Python当立 | 忆云竹
据澎湃新闻近日消息,山东省在其最新出版的小学信息技术六年级教材中,加入了Python的内容.在此之前,编程界也一直有传言,称浙江省将对中学信息技术教材进行改动,弃VB(Visual Basic 6.0 ...
- vb还是python强大-vb和python哪个速度快
Python好学,易上手.如果你是第一次学习计算机编程语言,推荐你学这个.更重要的是,学会这门语言,也能方便你对电脑中的文档进行处理.VB,面对大多数任务,编码速度都不及Python的. VB能快速的 ...
最新文章
- Cstring的使用
- 福布斯评科技未来五大趋势:电脑消失融入生活时间
- spark streaming 的 Job创建、调度、提交
- JavaScript中的arguments对象
- 气动调节阀基本结构图
- 《鹰猎长空》看世界范围内电影票价上涨的原因
- MySQL最全整理!java技术总监面试常见问题及答案
- 蜀山剑侠传打开服务器更新第一个文件失败,蜀山剑侠传,基础设定
- MySQL入门系列:查询简介(二)
- JS 函数参数及其传递
- 【每日英文】2021.8.5
- MIT线性代数笔记一 行图像和列图像
- 子选择器和后代选择器
- 苹果电脑查看python版本_Mac终端查看python版本号
- MVC 和Spring MVC
- 少用的却实用的计算机知识
- 十分钟带你了解计算思维
- matlab khatri rao积,关于矩阵Khatri-Rao积的一些迹不等式
- 算法的trick_完整推导了svm一遍,还有强化学习问的很多,dqn的各种trick了...
- image 微信小程序flex_微信小程序view标签以及display:flex的测试
热门文章
- C/C++对文件的读写
- Powershell中禁止执行脚本解决办法
- 7.数据结构 --- 图
- 61.Linux/Unix 系统编程手册(下) -- SOCKET: 高级主题
- 57.Linux/Unix 系统编程手册(下) -- SOCKET : Unix domain
- 11.ar, nm, objdump
- 20. jQuery 遍历 - 祖先
- [Python Study Notes]pandas.DataFrame.plot()函数绘图
- Qt--自定义Delegate
- Jmeter性能测试之如何写Java请求测试用例类