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组件)(转)相关推荐

  1. python与vb可以互换吗_vb能配合python写程序么?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #自定义结构的传递的确比较麻烦,如果找到更好的方法,请务必告诉我 class ReadMail: _public_methods_=['Read_mail ...

  2. python与vb可以互换吗_把python 语句变成 vb 语句,仅仅几句

    一个小的程序,用来求 方程的解. 因为想知道vb 的程序写法,, 请大侠帮助. ''' def f(x): # f(x) = x^3 + 4 x^2 -8 #kk= math.pow(x, 3) + ...

  3. python调用vb文件_vb能配合python写程序么?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #自定义结构的传递的确比较麻烦,如果找到更好的方法,请务必告诉我 class ReadMail: _public_methods_=['Read_mail ...

  4. 疯狂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 ...

  5. python和vb的代码可以通用吗-VB6+Python混合编程(COM组件)(转)

    VB6+Python混合编程(COM组件) 0.2572018.05.10 16:01:23字数 553阅读 3725 Python的方便不用说,VB6做GUI的简单程度更不用说.二者混合编程的需求一 ...

  6. 大学python和vb哪个简单-python和vb哪个简单

    Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.是一种可用于 ...

  7. python和vb的代码可以通用吗-python和vb哪个简单

    Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.是一种可用于 ...

  8. 大学python和vb哪个简单-vb和python哪个速度快

    Python好学,易上手.如果你是第一次学习计算机编程语言,推荐你学这个.更重要的是,学会这门语言,也能方便你对电脑中的文档进行处理.VB,面对大多数任务,编码速度都不及Python的. VB能快速的 ...

  9. vb还是python强大-VB已死,Python当立 | 忆云竹

    据澎湃新闻近日消息,山东省在其最新出版的小学信息技术六年级教材中,加入了Python的内容.在此之前,编程界也一直有传言,称浙江省将对中学信息技术教材进行改动,弃VB(Visual Basic 6.0 ...

  10. vb还是python强大-vb和python哪个速度快

    Python好学,易上手.如果你是第一次学习计算机编程语言,推荐你学这个.更重要的是,学会这门语言,也能方便你对电脑中的文档进行处理.VB,面对大多数任务,编码速度都不及Python的. VB能快速的 ...

最新文章

  1. Cstring的使用
  2. 福布斯评科技未来五大趋势:电脑消失融入生活时间
  3. spark streaming 的 Job创建、调度、提交
  4. JavaScript中的arguments对象
  5. 气动调节阀基本结构图
  6. 《鹰猎长空》看世界范围内电影票价上涨的原因
  7. MySQL最全整理!java技术总监面试常见问题及答案
  8. 蜀山剑侠传打开服务器更新第一个文件失败,蜀山剑侠传,基础设定
  9. MySQL入门系列:查询简介(二)
  10. JS 函数参数及其传递
  11. 【每日英文】2021.8.5
  12. MIT线性代数笔记一 行图像和列图像
  13. 子选择器和后代选择器
  14. 苹果电脑查看python版本_Mac终端查看python版本号
  15. MVC 和Spring MVC
  16. 少用的却实用的计算机知识
  17. 十分钟带你了解计算思维
  18. matlab khatri rao积,关于矩阵Khatri-Rao积的一些迹不等式
  19. 算法的trick_完整推导了svm一遍,还有强化学习问的很多,dqn的各种trick了...
  20. image 微信小程序flex_微信小程序view标签以及display:flex的测试

热门文章

  1. C/C++对文件的读写
  2. Powershell中禁止执行脚本解决办法
  3. 7.数据结构 --- 图
  4. 61.Linux/Unix 系统编程手册(下) -- SOCKET: 高级主题
  5. 57.Linux/Unix 系统编程手册(下) -- SOCKET : Unix domain
  6. 11.ar, nm, objdump
  7. 20. jQuery 遍历 - 祖先
  8. [Python Study Notes]pandas.DataFrame.plot()函数绘图
  9. Qt--自定义Delegate
  10. Jmeter性能测试之如何写Java请求测试用例类